1

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

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 语句似乎不起作用。那或value = []在for循环内部。有什么想法吗?

4

1 回答 1

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)

这是有效的,因为当您尝试引用尚不存在的键时defaultdict,类型会自动创建一个键和一个空列表作为其值。list否则,它的行为就像普通字典一样。

结果:

>>> data
defaultdict(<type 'list'>, {'23301': ['Q8NDI1', 'A8K930'], 
'64343': ['H7BXU6', 'Q9H6S1', 'C9JB40'], '266743': ['Q8IUM7']})
于 2012-07-23T10:59:33.103 回答