簡體   English   中英

關於比較我的兩個詞典時遇到的麻煩的建議?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM