[英]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.