在 Python 中对字典进行排序

我使用 Python 3,6,我需要按值对多维字典进行排序。

预期的结果是输出将按Num_Subdir值排序,并显示相同的字典,但具有此顺序。我通过函数获取字典,并将此函数的输出重定向到 var 'Dirs',因此 dirs 是字典。


我尝试使用sorted函数,但一直收到此错误:


orden = sorted(['dirs'], key = lambda x: x['Num_Subdir'])

错误:


TypeError: string indices must be integers

编辑


我简化了我的字典,只得到我将来会使用的:


{'1234': {'/root/git/dir1/1234': 10},

 'cece': {'/root/git/dir1/cece': 0},

 'dir11': {'/root/git/dir1/dir11': 7},

 'dir13': {'/root/git/dir1/dir13': 7},

 'dir14': {'/root/git/dir1/dir14': 11},

 'dir15': {'/root/git/dir1/dir15': 12},

 'dir16': {'/root/git/dir1/dir16': 0},

 'dir17': {'/root/git/dir1/dir17': 0},

 'dir18': {'/root/git/dir1/dir18': 0},

 'jaja': {'/root/git/dir1/jaja': 0},

 'ola1': {'/root/git/dir1/ola1': 0}}

我现在如何按目录的值排序?


编辑2:


我得到了它: sorted(dicta.items(), key=lambda x: [int(x) for x in x[1].values()], reverse = True)



DIEA
浏览 146回答 3
3回答

人到中年有点甜

如果将您的 dict 更简化为:dirs = { '/root/git/dir1/1234': 10, '/root/git/dir1/cece': 0, '/root/git/dir1/dir11': 7, '/root/git/dir1/dir13': 7, '/root/git/dir1/dir14': 11, '/root/git/dir1/dir15': 12, '/root/git/dir1/dir16': 0, '/root/git/dir1/dir17': 0, '/root/git/dir1/dir18': 0, '/root/git/dir1/jaja': 0, '/root/git/dir1/ola1': 0}然后您可以按数字排序打印它:print('{' + ',\n'.join(    '\'{}\': {}'.format(x, y) for x, y in sorted(    dirs.items(), key=lambda x: x[1])) + '}')输出:{'/root/git/dir1/ola1': 0,'/root/git/dir1/cece': 0,'/root/git/dir1/dir18': 0,'/root/git/dir1/dir17': 0,'/root/git/dir1/jaja': 0,'/root/git/dir1/dir16': 0,'/root/git/dir1/dir11': 7,'/root/git/dir1/dir13': 7,'/root/git/dir1/1234': 10,'/root/git/dir1/dir14': 11,'/root/git/dir1/dir15': 12}

www说

我认为问题在于您使用的数据结构!默认情况下,python 中的字典没有称为排序的功能。因此,您需要考虑替代方案。解决这个问题的方法之一是使用元组列表。为什么是元组列表?元组列表可以在必要时轻松转换为 dict。例如,>>> list_of_tuples = [('a', 'b'), ('c', 'd')]>>> a_dict = dict(list_of_tuples)>>> a_dict{'a': 'b', 'c': 'd'}现在,由于您的数据是 dict 格式,您需要将其转换为可以使用 dict.items() 方法完成的元组列表。就是这样>>> a_dict.items()dict_items([('a', 'b'), ('c', 'd')])>>> list(a_dict.items())[('a', 'b'), ('c', 'd')]结果与 完全相同list_of_tuples。请记住,dict 类型对象的键应该始终是不可变的数据类型。现在,回到你的问题,我尝试使用排序函数,但一直收到此错误: orden = sorted(['dirs'], key = lambda x: x['Num_Subdir']) 错误: TypeError: string indices must be integers您在 x 中获得的值是一个字符串,而不是一个 dict 类型的对象。因此,TypeError.获取编辑结果:data_dict = {k: {v['Path']: v['Num_Subdir']} for k, v in d['Subdir'].items()}更改为建议的数据结构data = [(k, (v['Path'], v['Num_Subdir'])) for k, v in d['Subdir'].items()]按路径排序data.sort(key=lambda item: item[1][0], reverse=False)按 Num_Subdir 排序data.sort(key=lambda item: item[1][1], reverse=False)按子目录名称排序data.sort(key=lambda item: item[0], reverse=False)  # reverse=True for descending order

慕桂英546537

希望这可以帮助...试试 OrderedDict,这是非常有用的一个,>>>from collections import OrderedDict>>>final_response1 = OrderedDict(sorted(dirs['Subdir']['1234']['Subdir'].items(),key=lambda t: t[0]))#In the above these were the reference that you have stored **"dirs['Subdir']['1234']['Subdir'].items()"**现在您将获得已排序的项目。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python