我有两个表单的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) ]
答案 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)