Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于排序的字典值字典?_Python_Python 3.x_Dictionary - Fatal编程技术网

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 normal
dict
OrderedDict
完全相同。@aslamsha22我可以看出您的代码在me@shaikmoeed:我正在使用python 3.5,顺序不会一直正确。您正在创建OrderedCollection(OK)然后将其项实例化一个标准的
dict
,根据所使用的Python版本,可以对其排序,也可以不排序。我不明白。哦,是不是因为你假设输入在字典的最高级别只有一个键(而且你还假设它总是被命名为“优点”)?“这些假设在未来会永远成立吗?”罗纳尔纳德龙森是的,我在做一些假设。我相信你的答案是完美的。你正在创建一个OrderedCollection(好的),然后将它的项实例化为一个标准的
dict
,根据使用的Python版本的不同,它可能被排序,也可能不被排序。我不明白。哦,是不是因为你假设输入在字典的最高级别只有一个键(而且你还假设它总是被命名为“优点”)?“这些假设在未来会永远成立吗?”罗纳尔纳德龙森是的,我在做一些假设。我相信你的答案是完美的。