使用外部文件定义字典键的值列表

时间:2012-07-23 10:55:25

标签: python dictionary

我有一个包含配对条目(键)列表的文件,如下所示:

6416    2318
84665   88
90  2339
2624    5371
6118    6774

我还有另一个文件,其中包含这些键的值:

266743  Q8IUM7
64343   H7BXU6
64343   Q9H6S1
64343   C9JB40
23301   Q8NDI1
23301   A8K930

正如您所看到的,同一个键可以有多个值。我要做的是通过自动创建初始k,v对来创建字典,然后为字典中已经存在的每个条目附加更多值,如下所示:

程序找到"266743: 'Q8IUM7'",然后"64343: 'H7BXU6'"。当它找到"64343: 'Q9H6S1'"时,它会执行此操作:"64343: ['H7BXU6', 'Q9H6S1']"

这是我到目前为止所做的:

# Create dictionary
    data = {}

    for line in inmap:
        value = []
        k, v = [x.strip() for x in line.split('\t')]
        data[k] = value.append(v)
        if k in data.viewkeys() == True and v in data.viewvalues() == False:
            data[k] = value.append(v)

但if语句似乎不起作用。那个或者在for循环中有value = []。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

这不是一个好主意。你应该从一开始就使用一个列表并随着时间展开该列表,当找到多个值时,不要从“字符串”更改为“字符串列表”。

为此,您只需使用

即可
from collections import defaultdict
data = defaultdict(list)
for line in inmap:
    k, v = (x.strip() for x in line.split('\t'))
    data[k].append(v)

这是有效的,因为当您尝试引用尚不存在的密钥时,类型list的{​​{3}}将自动创建一个密钥以及一个空列表作为其值。否则,它的行为就像普通字典一样。

结果:

>>> data
defaultdict(<type 'list'>, {'23301': ['Q8NDI1', 'A8K930'], 
'64343': ['H7BXU6', 'Q9H6S1', 'C9JB40'], '266743': ['Q8IUM7']})