Python 基于排序的字典值字典?
我有一本这样的字典Python 基于排序的字典值字典?,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我有一本这样的字典 d = { 'Benefits': { 1: { 'BEN1': { 'D': [{'description': 'D1'}], 'C': [{'description': 'C1'}] } }, 2: { 'BEN2': { 'D': [{'descri
d = {
'Benefits': {
1: {
'BEN1': {
'D': [{'description': 'D1'}],
'C': [{'description': 'C1'}]
}
},
2: {
'BEN2': {
'D': [{'description': 'D2'}],
'C': [{'description': 'C2'}]
}
}
}
}
我试图根据最后一个值的键(列表)对字典进行排序
比如说
我正在寻找get字典值,比如第一个是“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'}]}
这不起作用,因为它仅对福利
项进行排序。在这里,您需要对内部项进行排序,因此我们必须访问内部项并对其进行排序
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())))
这不起作用,因为它仅对福利
项进行排序。在这里,您需要对内部项进行排序,因此我们必须访问内部项并对其进行排序
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())))
下面的代码将按其键对任何字典进行排序,并按其键对也是字典的任何字典值进行递归排序,并且不对正在排序的字典的内容进行假设。它使用了一个
OrderedDict
,但是如果您可以确定它将始终在Python3.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))
以下代码将按其键对任何字典进行排序,并按其键对也是字典的任何字典值进行递归排序,并且不对正在排序的字典的内容进行假设。它使用了一个
OrderedDict
,但是如果您可以确定它将始终在Python3.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))
能否请您提供预期的输出和更好的解释,说明如何对其进行排序。@shaikmoeed:不正确,自Python 3.6以来,它们是按插入顺序排序的。@shaikmoeed:否,因为3.6标准的
dict
和orderedict
是完全相同的。@aslamsha22我可以看出您的代码在me@shaikmoeed:我正在使用python 3.5,顺序不会一直正确。请提供预期的输出,并更好地解释如何对其进行排序。@shaikmoeed:不正确,自Python 3.6以来,它们是按插入顺序排序的。@shaikmoeed:no,因为3.6 normaldict
和OrderedDict
完全相同。@aslamsha22我可以看出您的代码在me@shaikmoeed:我正在使用python 3.5,顺序不会一直正确。您正在创建OrderedCollection(OK)然后将其项实例化一个标准的dict
,根据所使用的Python版本,可以对其排序,也可以不排序。我不明白。哦,是不是因为你假设输入在字典的最高级别只有一个键(而且你还假设它总是被命名为“优点”)?“这些假设在未来会永远成立吗?”罗纳尔纳德龙森是的,我在做一些假设。我相信你的答案是完美的。你正在创建一个OrderedCollection(好的),然后将它的项实例化为一个标准的dict
,根据使用的Python版本的不同,它可能被排序,也可能不被排序。我不明白。哦,是不是因为你假设输入在字典的最高级别只有一个键(而且你还假设它总是被命名为“优点”)?“这些假设在未来会永远成立吗?”罗纳尔纳德龙森是的,我在做一些假设。我相信你的答案是完美的。