繁体   English   中英

比较2个字典列表中值的[1:]元素的最快方法

[英]Fastest way to Compare the [1:] elements of a value in 2 dict of lists

我有以下两个庞大的词典:

Dic1={0:['F','15','O+','5'],1:['M','12','O+'],2:[F,'20','O-'],3:['F','10','A+'],4:['M','45','?']...}

Dic2={0:['M','15','O+','5'],1:['M','12','O+'],2:[F,'20','A-'],3:['F','10','A+'],4:['F','15','?'],5:['M','10','A+']...}

我需要比较两者以找到两个字典中相同的V [1:],将它们组合在一个字典中并从另一个字典中删除该值。

新Dic1:

Dic1={0:['F,M','15','O+','5'],1:['2M','12','O+'],2:[F,'20','O-'],3:['2F,M','10','A+'],4:['M','45','?']...}

新Dic2:

Dic2={2:[F,'20','A-'],4:['F','15','?'],...}

我到目前为止的想法是:

for ((key1, value1), (key2, value2)) in zip(Dic1.items(),  Dic2.items()):
 if value1[1:]==value2[1:]:
     value1.append(value2[:1])     
     del Dic1[Value2]

但我有问题,因为字典非常大,我需要一个节省时间的方法,我想到了设置,但我不知道如何使用它。

以下应该会产生预期的结果:

Dic1={0:['F','15','O+','5'],1:['M','12','O+'],2:['F','20','O-'],3:['F','10','A+'],4:['M','45','?']}
Dic2={0:['M','15','O+','5'],1:['M','12','O+'],2:['F','20','A-'],3:['F','10','A+'],4:['F','15','?'],5:['M','10','A+']}

for i in Dic1.keys():
    if Dic1[i][1:] == Dic2[i][1:]:
        if Dic1[i][0] == Dic2[i][0]:
            Dic1[i][0] = '2' + Dic1[i][0]
        else:
            Dic1[i][0] += ',' + Dic2[i][0]
        Dic2.pop(i) 

print Dic1
print Dic2

以上产生:

{0:['F,M','15','O +','5'],1:['2M','12','O +'],2:['F','20', 'O-'],3:['2F','10','A +'],4:['M','45','?']}

{2:['F','20','A-'],4:['F','15','?'],5:['M','10','A +']}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM