簡體   English   中英

如何在Python中比較兩個不同的元組列表中的鍵?

[英]How to compare keys in two different lists of tuples in Python?

我有兩個單獨的字典形式的元組列表。 位於括號中的是我的鍵,括號中是我的值。

文件1:

('8', '158116110')
['0.00509']
('6', '44338625')
['0.00525']
('3', '127518469')
['2.56E-05']
('9', '141754441')
['0.00585']

文件2:

('9', '154331672')
['0.165435473']
('8', '100949929')
['0.493410385']
('9', '120747803')
['0.969364472']
('1', '12152579')
['0.669831913']

專門研究兩個列表中的鍵,我想計算這些鍵中有多少鍵在10000范圍內。

如果你注意到,我每個值有兩個鍵。 我希望我的代碼以這種方式格式化,而:如果File1中的單個鍵的第一個數字(例如“8”)等於File2中單個鍵的第一個數字(例如“8”)並且如果這些單獨鍵的第二個數字(例如'158116110'和'100949929')彼此在10000范圍內,count + = 1

這是我到目前為止:

with open('filename1.txt') as f1, open('filename2.txt') as f2:
x, y = f1, f2
count = 0
for x, y in (f1, f2):
    if ((f2 - f1) < 10000) and (digit1_f1 == digit1_f2):
        count +=1
    break

但是代碼失敗了。 我收到此錯誤:

Traceback (most recent call last):
  File "/Users/macbookpro/Desktop/compareDict.py", line 4, in <module>
for x, y in (f1, f2):
  ValueError: too many values to unpack (expected 2)

兩個列表長度相等,每個包含9524行。

為什么我收到此錯誤?

首先,當您執行for x, y in (f1, f2):實際發生的是您正在創建兩個文件對象的元組,並且您將迭代該元組(而不是文件對象本身),所以每次迭代都會返回一個文件對象,但是根據你的語法,它試圖將文件對象解壓縮為xy兩個變量,導致問題。

其次,當你執行f2-f1你只是減去兩個文件對象(這是不可能的)。

我認為,根據您的示例,具有相同第一個鍵的行可以在不同的行中,最好首先為每個文件創建兩個詞典。 字典的格式可以是 -

d1 = {<first key> : { <second key one>: value , <second key two>: value .... }}

示例 -

d1 = {'8' : { '158116110' : '0.00509' } , '9' : { '141754441' : '0.00585' } ... }

一旦創建了兩個字典,您就可以循環遍歷一個字典,然后從另一個字典中獲取相同的密鑰(從兩個字典中獲取該密鑰的值)並檢查它們是否具有在10000范圍內的值。

示例代碼 -

d = {}
for k,v in d1.items():
    v1 = d2.get(k)
    if v1:
        for k1 in v.keys():
            for k2 in v1.keys():
                if abs(int(k1) - int(k2)) < 10000:
                    if k in d:
                        d[k] += 1
                    else:
                        d[k] = 0

這不是迭代兩件事的正確方法。 而是嘗試:

for x, y in zip(f1, f2):

這應該工作,雖然我不知道循環的肉,因為你沒有提供digit1_f1digit1_f2是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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