繁体   English   中英

排序基于字典的字典的字典值?

[英]Sort based Dictionary of Dictionary of Dictionary Values?

我有这样的字典

d = {
    'Benefits': {
        1: {
            'BEN1': {
                'D': [{'description': 'D1'}],
                'C': [{'description': 'C1'}]
            }
        },
        2: {
            'BEN2': {
                'D': [{'description': 'D2'}],
                'C': [{'description': 'C2'}]
            }
        }
    }
}

我正在尝试根据LAST VALUES(LIST)排序字典。

例如

我正在寻找第一个像'C'和第二个像'D'的字典值

我正在尝试获得正确的订单。 这是代码:

d1 = collections.OrderedDict(sorted(d.items()))

不幸的是没有得到正确的结果

这是我的预期输出

{'Benefits':
 {1:
  {'BEN1':
   {'C':[{'description': 'C1'}], 'D': [{'description': 'D1'}]
   }
  },
 2:
  {'BEN2':
   {'C': [{'description': 'C2'}], 'D': [{'description': 'D2'}]
   }
  }
 }
}

我正在使用python 3.5。 我试图得到这样的订单

{'C':[{'description': 'C1'}], 'D': [{'description': 'D1'}]}

以下代码将按其关键字对任何字典进行排序,并根据其关键字递归对也是字典的任何字典值进行排序,并且不对要排序的字典的内容进行任何假设。 它使用OrderedDict但是如果您可以确定它将始终在Python 3.6或更高版本上运行,则可以简单地更改为使用dict

from collections import OrderedDict

d = {
    'Benefits': {
        1: {
            'BEN1': {
                'D': [{'description': 'D1'}],
                'C': [{'description': 'C1'}]
            }
        },
        2: {
            'BEN2': {
                'D': [{'description': 'D2'}],
                'C': [{'description': 'C2'}]
            }
        }
    }
}

def sort_dict(d):
    items = [[k, v] for k, v in sorted(d.items(), key=lambda x: x[0])]
    for item in items:
        if isinstance(item[1], dict):
            item[1] = sort_dict(item[1])
    return OrderedDict(items)
    #return dict(items)

print(sort_dict(d))

观看演示

d1 = collections.OrderedDict(sorted(d.items()))

这是行不通的,因为它仅在“ Benefits项上排序。 在这里您要对内部项目进行排序,因此我们必须到达内部项目并对它们进行排序。

d1 = {'Benefits': {}}
for a_benefit in d['Benefits']:
    d1['Benefits'][a_benefit] = {}
    for a_ben in d['Benefits'][a_benefit]:
        d1['Benefits'][a_benefit][a_ben] = dict(collections.OrderedDict(sorted(d['Benefits'][a_benefit][a_ben].items())))

暂无
暂无

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

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