首页 > 解决方案 > 嵌套的两个 OrderedDict 之间的比较

问题描述

我想比较两个嵌套的orderedDict dict,我必须比较dict1 Vs dict2的每个键。

>>> dict1 = OrderedDict([('a', OrderedDict([('b', '20'),
        ('c', '30'),('d', OrderedDict([('e', '40')]))]))])
>>> dict2 = OrderedDict([('a', OrderedDict([('b', '20'),
        ('c', '30'),('d', OrderedDict([('e', '50')]))]))])
for k,v in dict1.iteritems():
    for k1,v1 in v.iteritems():
        print "key %s, value  %s" %(k1,v1)
        for k2,v2 in dict2.iteritems():
            for k3,v3 in v2.iteritems():
               print "key %s, value  %s" %(k3,v3)

输出:


key b, value  20
key b, value  20
key c, value  30
key d, value  OrderedDict([('e', '50')])
key c, value  30
key b, value  20
key c, value  30
key d, value  OrderedDict([('e', '50')])
key d, value  OrderedDict([('e', '40')])
key b, value  20
key c, value  30
key d, value  OrderedDict([('e', '50')])

由于代码很长,请帮助编写比较(k1,v1)与(k3,v3)之间的比较

标签: python

解决方案


数据:

dict1 = OrderedDict([('a',
              OrderedDict([('b', '20'),
                           ('c', '30'),
                           ('d', OrderedDict([('e', '40')]))]))])

dict2 = OrderedDict([('a',
              OrderedDict([('b', '20'),
                           ('c', '30'),
                           ('d', OrderedDict([('e', '50')]))]))])

也许解压OrderedDicts成 aDataFrame是一个更好的选择:

import pandas as pd
from pandas.io.json import json_normalize

dict_list = [dict1, dict2]  # more OrderedDicts can be added

df = pd.concat([json_normalize(x) for x in dict_list], sort=True).reset_index(drop=True)

df =

在此处输入图像描述

如果keys不同,也可以使用:

在此处输入图像描述

打印product行数df

from itertools import product

dict_product = [list(product(df.iloc[y-1], df.iloc[y])) for y in df.index if y != 0]

print(dict_product)

[[('20', '20'),
  ('20', '30'),
  ('20', '50'),
  ('30', '20'),
  ('30', '30'),
  ('30', '50'),
  ('40', '20'),
  ('40', '30'),
  ('40', '50')]]

推荐阅读