2015-10-15 96 views
1
dic1 = {'memory':'4','cpu':'2','disk':{'total':'160','swap':'4','/':'26','/var':'7','/tmp':'2'}} 

dic2 = {'memory':8','cpu':'2','disk':{'total':'120,'swap':'4','/':'26','/var':'7','/tmp':'2'}} 

请注意,这两个字典本身都包含另一个字典。 什么是最有效的方法来比较每个项目而不做dict1 == dict2?最有效的方法来比较python中的两个字典

由于我必须看到值的一些%变化。所以剩下的唯一选项就是迭代每个字典项目。是这样的:

for key1 in dic1: 
    for key2 in dic2: 
     if not isinstance(dic1[key1],dict): 
     #compare cpu & memory here 
     if int(dic1[key1]) > int(dict2[key2]) 
     else: 
      #compare disk(internal dictionary here) 
+0

你想用钥匙做什么“磁盘”,它的价值是一本字典? – Kasramvd

+0

同样,我还需要在“磁盘”字典中查看%更改值。是的,你可以认为字典和“磁盘”字典中的“键”保持不变。 – akhi

回答

0

您可以使用itertools.zip_longest来压缩的价值和他们在一个列表理解比较:

>>> from itertools import chain,zip_longest 

["do something" if isinstance(i,dict) and all(k<v for k,v in zip_longest(i.values(),j.values())) else "do something" for i,j in zip_longest(dic1.values(),dic2.values())] 

注意的是,这里根据你的需要,你可以用它代替all你可能正在其他功能有兴趣使用any或者您想对数值进行一些算术运算。

+0

我也想比较嵌套字典值。有趣的知道链&zip_longest。希望这是用来改善性能 – akhi

+0

@akhi由于你没有提供你想要做的值,我建议一个一般的方法。检查编辑! – Kasramvd