Python中的排序字典

2024-04-24 01:11:16 发布

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

我使用的是python3,6,我需要按值排序一个多维字典。你知道吗

这是格言:

{'Num_Subdir': 11,
 'Path': '/root/git/dir1',
 'RealSize': '236K',
 'Subdir': {'1234': {'Num_Subdir': 10,
                     'Path': '/root/git/dir1/1234',
                     'RealSize': '44K',
                     'Subdir': {'ola000': {'Num_Subdir': 0,
                                           'Path': '/root/git/dir1/1234/ola000',
                                           'RealSize': '4,0K',
                                           'Subdir': {}},
                                'ola00sd1': {'Num_Subdir': 0,
                                             'Path': '/root/git/dir1/1234/ola00sd1',
                                             'RealSize': '4,0K',
                                             'Subdir': {}},
                                'ola00sdf': {'Num_Subdir': 0,
                                             'Path': '/root/git/dir1/1234/ola00sdf',
                                             'RealSize': '4,0K',
                                             'Subdir': {}},
                                'ola1': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/1234/ola1',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                'ola2': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/1234/ola2',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                'ola5': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/1234/ola5',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                'ola6': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/1234/ola6',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                'ola7': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/1234/ola7',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                'ola8': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/1234/ola8',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                'ola9': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/1234/ola9',
                                         'RealSize': '4,0K',
                                         'Subdir': {}}}},
            'cece': {'Num_Subdir': 0,
                     'Path': '/root/git/dir1/cece',
                     'RealSize': '4,0K',
                     'Subdir': {}},
            'dir11': {'Num_Subdir': 7,
                      'Path': '/root/git/dir1/dir11',
                      'RealSize': '32K',
                      'Subdir': {'ola1': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir11/ola1',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'ola2': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir11/ola2',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'ola3': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir11/ola3',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'ola5': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir11/ola5',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'ola6': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir11/ola6',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'ola7': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir11/ola7',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'ola9': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir11/ola9',
                                          'RealSize': '4,0K',
                                          'Subdir': {}}}},
            'dir13': {'Num_Subdir': 7,
                      'Path': '/root/git/dir1/dir13',
                      'RealSize': '32K',
                      'Subdir': {'ola1': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir13/ola1',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'ola2': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir13/ola2',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'ola3': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir13/ola3',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'ola4': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir13/ola4',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'ola5': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir13/ola5',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'ola6': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir13/ola6',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'ola8': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir13/ola8',
                                          'RealSize': '4,0K',
                                          'Subdir': {}}}},
            'dir14': {'Num_Subdir': 11,
                      'Path': '/root/git/dir1/dir14',
                      'RealSize': '48K',
                      'Subdir': {'as1': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir14/as1',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'as2': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir14/as2',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'as3': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir14/as3',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'as4': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir14/as4',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'as5': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir14/as5',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'as6': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir14/as6',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'as7': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir14/as7',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'as8': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir14/as8',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'as9': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir14/as9',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'as90': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir14/as90',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'asd': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir14/asd',
                                         'RealSize': '4,0K',
                                         'Subdir': {}}}},
            'dir15': {'Num_Subdir': 12,
                      'Path': '/root/git/dir1/dir15',
                      'RealSize': '52K',
                      'Subdir': {'as2': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir15/as2',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'as4': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir15/as4',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'as5': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir15/as5',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'as6': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir15/as6',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'as8': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir15/as8',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'asd': {'Num_Subdir': 0,
                                         'Path': '/root/git/dir1/dir15/asd',
                                         'RealSize': '4,0K',
                                         'Subdir': {}},
                                 'qqwa': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir15/qqwa',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'qqwd': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir15/qqwd',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'qqwe': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir15/qqwe',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'qqwg': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir15/qqwg',
                                          'RealSize': '4,0K',
                                          'Subdir': {}},
                                 'qqwjj': {'Num_Subdir': 0,
                                           'Path': '/root/git/dir1/dir15/qqwjj',
                                           'RealSize': '4,0K',
                                           'Subdir': {}},
                                 'qqws': {'Num_Subdir': 0,
                                          'Path': '/root/git/dir1/dir15/qqws',
                                          'RealSize': '4,0K',
                                          'Subdir': {}}}},
            'dir16': {'Num_Subdir': 0,
                      'Path': '/root/git/dir1/dir16',
                      'RealSize': '4,0K',
                      'Subdir': {}},
            'dir17': {'Num_Subdir': 0,
                      'Path': '/root/git/dir1/dir17',
                      'RealSize': '4,0K',
                      'Subdir': {}},
            'dir18': {'Num_Subdir': 0,
                      'Path': '/root/git/dir1/dir18',
                      'RealSize': '4,0K',
                      'Subdir': {}},
            'jaja': {'Num_Subdir': 0,
                     'Path': '/root/git/dir1/jaja',
                     'RealSize': '4,0K',
                     'Subdir': {}},
            'ola1': {'Num_Subdir': 0,
                     'Path': '/root/git/dir1/ola1',
                     'RealSize': '4,0K',
                     'Subdir': {}}}}

预期结果是,输出将按Num_Subdir值排序,并显示相同的dict,但顺序是这样的。 我通过一个函数得到dict,并将这个函数的输出重定向到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:

我知道了:分类(口述事项(),key=lambda x:[int(x)表示x中的x[1]。values()],reverse=True)

谢谢大家


Tags: pathgitrootnumsubdirdir1dir13dir11
3条回答

希望这有帮助。。。你知道吗

试着订购一个非常有用的

>>>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()"**

现在您将获得已排序的项目。你知道吗

我认为问题出在你使用的数据结构上!你知道吗

默认情况下,python中的字典没有名为sort的特性。所以,你需要考虑另一种选择。你知道吗

解决这个问题的方法之一是使用元组列表。你知道吗

为什么要列出元组?

元组列表可以在必要时轻松地转换为dict。例如

>>> list_of_tuples = [('a', 'b'), ('c', 'd')]
>>> a_dict = dict(list_of_tuples)
>>> a_dict
{'a': 'b', 'c': 'd'}

现在,由于您的数据是dict格式的,您需要将其转换为元组列表,可以使用目录项()方法。下面是方法

>>> a_dict.items()
dict_items([('a', 'b'), ('c', 'd')])
>>> list(a_dict.items())
[('a', 'b'), ('c', 'd')]

结果与list_of_tuples完全相同。记住,dict类型对象的键应该始终是不可变的数据类型。你知道吗

现在,回到你的问题,

I've tried to use sorted function but all the time I receive this error: orden = sorted(['dirs'], key = lambda x: x['Num_Subdir']) Error: TypeError: string indices must be integers

在x中得到的值是一个字符串,而不是dict类型的对象。因此,TypeError。你知道吗

Getting your edit result:

data_dict = {k: {v['Path']: v['Num_Subdir']} for k, v in d['Subdir'].items()}

Changing to proposed data structure

data = [(k, (v['Path'], v['Num_Subdir'])) for k, v in d['Subdir'].items()]

Sorting it by path

data.sort(key=lambda item: item[1][0], reverse=False)

Sorting it by Num_Subdir

data.sort(key=lambda item: item[1][1], reverse=False)

Sorting it by Subdir name

data.sort(key=lambda item: item[0], reverse=False)  # reverse=True for descending order

如果把你的口述简化为:

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}

相关问题 更多 >