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