1

我是初学者。我编写了一个脚本,它接受 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

请提出您的建议。

4

1 回答 1

2

I suspect the problem is here:

if example.has_key(key1):
   example[key1].append(value1)
else:
   example[key1] = value1

When example does not contain key1, it creates a new entry for it, whose value is the string value1. If example does contain key1, it attempts to append the string value1 to whatever is already there. However, this does not make sense. You can't use append to append two strings.

You probably want:

if example.has_key(key1):
   example[key1].append(value1)
else:
   example[key1] = [value1] #the value is a list containing one string
于 2012-08-09T18:18:05.490 回答