这是我的原始代码:
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,如何更改代码并修复它?
答案 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)
有几个问题。变量键分配两次,从未使用过。字典可能读作字符串而不是数字。