1

私は初心者です。1000万エントリの入力リストを受け取るスクリプトを作成しました(a:bの形式で、aとbは英数字です)。

次に、これらのエントリから辞書を作成します。多くのリストエントリでは、2番目の部分(コロンの後)が一般的です。(たとえば、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

問題はここにあると思います:

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

exampleが含まれていない場合key1、その値が文字列である新しいエントリを作成しますvalue1。exampleに が含まれkey1ている場合、既存のものに文字列を追加しようとしますvalue1。しかし、これは意味がありません。append2 つの文字列を追加するために使用することはできません。

あなたはおそらく欲しい:

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 に答える