比较python中两个字典的最有效方法

时间:2015-10-15 05:18:02

标签: python-3.x

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的情况下比较每个项目的最有效方法是什么?

因为我必须看到值的一些%变化。所以剩下的唯一选择是遍历每个字典项。类似的东西:

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)

1 个答案:

答案 0 :(得分: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,或者您可能希望对值进行一些算术运算。