检查python列表中是否存在条目并添加元素

时间:2014-06-02 14:27:36

标签: python list

我有两个表单的python列表

list1 = [('TGFB1', 'TGFB1', 1), ('TGFB1', 'CRP', 0.4),('BRCA2', 'TP53', 0.3)]
list2 = [('BRCA1', 'TP53', 2), ('TGFB1', 'CRP', 0.4),('BRCA2', 'TP53', 0.3)]

我需要检查list2中的每个条目是否都存在于list1中。如果存在,则添加整数部分并存储在新列表中。如果不存在,只需将该条目附加到新创建的列表中。所以这里我新创建的list3应该看起来像

list3 = [('TGFB1', 'TGFB1', 1), ('TGFB1', 'CRP', 0.8),('BRCA2', 'TP53', 0.6),('BRCA1', 'TP53', 2) ]

2 个答案:

答案 0 :(得分:3)

根据我的上述评论,这是您可能想要的:

from copy import copy

d3 = copy(dict(((x, y), z) for x, y, z in list1))
d2 = dict(((x, y), z) for x, y, z in list2)

for key, value in d2.iteritems():
    d3[key] = (d3[key] if key in d3 else 0.0) + value

如果你真的想转向d3然后回到相同结构的列表使用:

list3 = [key + (value,) for key, value in d3.iteritems()]

答案 1 :(得分:0)

这是我经常做的更复杂的版本。通常情况下,我不关心订单,只是把东西扔进dict。或者有时我按键订购,所以初始订单并不重要。

OrderedDict(python2.7 +):

from collections import OrderedDict

list1 = [('TGFB1', 'TGFB1', 1), ('TGFB1', 'CRP', 0.4),('BRCA2', 'TP53',0.3)]
list2 = [('BRCA1', 'TP53',2), ('TGFB1', 'CRP', 0.4),('BRCA2', 'TP53',0.3)]

d=OrderedDict()
for i in list1:
    d[i[0:2]]=i[2]
for i in list2:
    if i[0:2] in d:
        d[i[0:2]]+=i[2]
    else:
        d[i[0:2]]=i[2]
list3=[k+(v,) for k,v in d.items()]
print(list3)