关于比较我的两本词典时遇到麻烦的建议?

时间:2015-07-19 22:25:46

标签: python python-3.x dictionary

这是我的原始代码:

import csv
with open ("filename1.txt") as f:
    dict1 = {}
    r = csv.reader(f,delimiter="\t")
    for row in r:

        a, b, v = row
        dict1.setdefault((a,b),[]).append(v)

for key in dict1:
    print(key[0])
    print(key[1])
    print(d[key][0]])

这段代码当然会打印出我想要的列。例如,这是从中打印的文本文件的示例。我可以控制我的键,我可以打印第1,2或3列。

7   10165876    0.457295035
6   145989671   0.738336666
3   225038504   0.575564389

然而,当我实现此代码并尝试比较两个字典时,我不再能够控制我的密钥而且出现错误:

import csv
with open ("filename1.txt") as f:
   dict1 = {}
   r = csv.reader(f,delimiter="\t")
   for row in r:

       a, b, v = row
       dict1.setdefault((a,b),[]).append(v)

  #for key in dict1:
       #print(key[0])
       #print(key[1])
       #print(d[key][0]])

with open ("filename2.txt") as f:
   dict2 = {}
   r = csv.reader(f,delimiter="\t")
   for row in r:

      a, b, v = row
      dict2.setdefault((a,b),[]).append(v)

  #for key in dict2:
     #print(key[0])

   count = 0
   for key in dict1:
       for key in dict2:
           if (dict1[0] == dict2[0]) and abs(dict1[1] - dict2[1]) < 10000:
               count +=1

错误:

Traceback (most recent call last):
File "/Users/macbookpro/Desktop/MainDict.py", line 29, in <module>
if (dict1[0] == dict2[0]) and abs(dict1[1] - dict2[1]) < 10000:
KeyError: 0

我用谷歌搜索,我理解错误的含义,但它与我的代码有什么关系?正如我之前提到的,在原始代码中我没有得到KeyError。但现在,当我把所有东西放在一起时,我做到了。

为什么我会收到KeyError,如何更改代码并修复它?

2 个答案:

答案 0 :(得分:1)

for key in dict1:
   for key in dict2:
       if (dict1[0] == dict2[0]) and abs(dict1[1] - dict2[1]) < 10000:
           count +=1

您正在使用key作为两个循环的迭代器变量。所以你基本上覆盖了外部循环(dict1)中的变量,使其值无法访问。使用两个不同的名称。

此外,在循环体内,您使用常量键来访问字典中的元素。这与您使用key访问字典值(使用dict1[key])以及打印关键部分(key[0]key[1])的原始示例完全不同。所以请改用它们:

for key1 in dict1:
   for key2 in dict2:
       if key1[0] == key2[0] and abs(key1[1] - key2[1]) < 10000:
           count += 1

答案 1 :(得分:0)

有几个问题。变量键分配两次,从未使用过。字典可能读作字符串而不是数字。