[英]Suggestions on the trouble I am having with comparing my two dictionaries?
这是我的原始代码:
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
我已经在Google上搜索了一下,并且理解了错误的含义,但这与我的代码有什么关系? 如前所述,在原始代码中我没有得到KeyError。 但是现在,当我将所有内容放在一起时,我便开始工作。
为什么会收到KeyError,如何更改并修复代码?
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
有几个问题。 可变键分配了两次,并且从未使用过。 该字典可能被读为字符串而不是数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.