Python脚本在创建字典时被击中对于字典的每个键,有多个值(300个条目)列表

Python脚本在创建字典时被击中对于字典的每个键,有多个值(300个条目)列表,python,dictionary,python-3.x,Python,Dictionary,Python 3.x,我是初学者。我已经写了一个脚本,它接受1000万条输入列表(以a:b的形式,其中a和b是字母数字) 现在我想从这些条目创建一个字典。对于许多列表条目,第二部分(冒号之后)是常见的。(例如a:b,f:b,k:b——在这种情况下,我的键是b,值是一个列表[a,f,k]) 但不知怎的,我的剧本被打动了。我可以从日志中看到脚本被删除,日志大小没有增加。(对于我字典中的每一个键,都有一个400到500之间的列表。这会成为一个问题吗?) 如果我的输入列表包含较少的条目,则我的脚本工作正常 列表名是匹配的 p

我是初学者。我已经写了一个脚本,它接受1000万条输入列表(以a:b的形式,其中a和b是字母数字)

现在我想从这些条目创建一个字典。对于许多列表条目,第二部分(冒号之后)是常见的。(例如a:b,f:b,k:b——在这种情况下,我的键是b,值是一个列表[a,f,k])

但不知怎的,我的剧本被打动了。我可以从日志中看到脚本被删除,日志大小没有增加。(对于我字典中的每一个键,都有一个400到500之间的列表。这会成为一个问题吗?)

如果我的输入列表包含较少的条目,则我的脚本工作正常

列表名是匹配的

print 'match2 list: %s' % match2 # it shows the 10 million entries in form of a:b as expected 
for i in xrange(len(match2)):
    print 'Before Splitted variable : %s' % match2[i] # this print is for information
    templist = re.split(':', '%s' % match2[i])
    print 'Splitted list : %s' % templist # this print is for information
    length3 = len(templist)
    print "Length3 :%d" %length3
    key1 = templist[1]
    value1 = templist[0]
    if example.has_key(key1):
       example[key1].append(value1)
    else:
       example[key1] = value1

请给出您的建议。

我怀疑问题出在这里:

if example.has_key(key1):
   example[key1].append(value1)
else:
   example[key1] = value1
example
不包含
key1
时,它会为其创建一个新条目,其值为字符串
value1
。如果示例中确实包含
key1
,它会尝试将字符串
value1
附加到已经存在的内容中。然而,这是没有意义的。不能使用
append
附加两个字符串

您可能想要:

if example.has_key(key1):
   example[key1].append(value1)
else:
   example[key1] = [value1] #the value is a list containing one string

这个代码看起来很好。有点难看和低效,但很好;)我会添加一些东西来打印I,并检查它是否总是在同一点出现故障-可能是您的输入数据或周围的一些逻辑问题。这与您所问的问题无关,但我认为
re.split
在这方面做得过火了。您可以只执行
templast=match2[i].split(“:”,maxslit=1)
,这将有额外的好处,可以保证
len(templast)==2
,因为最多执行一次拆分。如果您知道列表项中始终包含
,并且执行
value1,key1=match2[i].split,您甚至可以更进一步(“:”,maxsplit=1)
。捕捉得很好,但这不应该抛出AttributeError并跳出吗?是的,这就是我测试代码时发生的情况。我怀疑OP在更高的位置有一个try catch,它会悄悄地吃掉错误。如果它之前有一个
try:Exception:
,它会不会立即退出循环或继续循环,而不是免费泽?