我有一个包含配对条目(键)列表的文件,如下所示:
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 = []
。有什么想法吗?
答案 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']})