繁体   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