我是一个初学者。我写了一个脚本,输入1000万个条目的输入列表(形式为:b,其中a和b是字母数字)。Python脚本创建字典时,为每个字典的键,有多个值(300条目)列表
现在我想从这些条目创建一本词典。对于很多列表条目,第二部分(在冒号后面)是常见的。 (例如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
请给你的建议。
该代码看起来不错。 。 。有点丑陋和低效率,但罚款;)我会添加一些东西打印出来,并检查它是否总是失败在同一点 - 可能是您的输入数据或一些周围的逻辑问题。 – ernie 2012-08-09 18:03:43
它与你所问的问题无关,但我认为're.split'在这里是过度杀伤。你可以做'templist = match2 [i] .split(':',maxsplit = 1)',这样可以保证'len(templist)== 2'的好处,因为最多只有一次分割。 – 2012-08-09 18:29:00
如果你知道你的列表项总是有一个':',并且执行'value1,key1 = match2 [i] .split(':',maxsplit = 1)',你甚至可以更进一步。 – 2012-08-09 18:30:12