嵌套二阶eddi的比较

2024-04-18 19:34:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想比较两个嵌套的orderedict dict,其中我必须比较dict1和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)


Tags: keyinforvaluek1v3v2ordereddict
1条回答
网友
1楼 · 发布于 2024-04-18 19:34:21

数据:

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解包成DataFrame是一个更好的选择:

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 =

enter image description here

如果keys是不同的:

enter image description here

打印productdf

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')]]

相关问题 更多 >