如何根据值的长度对字典进行排序?

2024-05-16 06:28:38 发布

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

我有一个儿子的档案。key是一个单独的标题,但是Results没有固定的长度。例如,dic[0:3]是:

{'key': 'accounting manager',
 'Results': [{'accountant': 3666.0},
  {'controller': 1254.0},
  {'financial analyst': 553.0},
  {'accounting clerk': 490.0},
  {'office manager': 355.0},
  {'auditor': 309.0},
  {'accounts payable clerk': 284.0},
  {'finance manager': 260.0}]}
{'key': '2d animator',
 'Results': [{'artist': 51.0},
  {'animator': 45.0},
  {'freelancer': 12.0},
]}
{'key': 'employee relations manager',
 'Results': [{'human resources generalist': 142.0},
  {'service manager': 121.0},
  {'human resources specialist': 120.0},
  {'engineering manager': 96.0},
  {'human resources manager': 91.0}]}

我可以根据len(dic[j]['Results'])j=0,..., len(dic)的dic进行排序吗?例如,上述实例的Results的Len是8,3,5。其他的可能是10,或者100,或者

上述各项的结果如下:

{'key': 'accounting manager',
 'Results': [{'accountant': 3666.0},
  {'controller': 1254.0},
  {'financial analyst': 553.0},
  {'accounting clerk': 490.0},
  {'office manager': 355.0},
  {'auditor': 309.0},
  {'accounts payable clerk': 284.0},
  {'finance manager': 260.0}]}
     {'key': 'employee relations manager',
 'Results': [{'human resources generalist': 142.0},
  {'service manager': 121.0},
  {'human resources specialist': 120.0},
  {'engineering manager': 96.0},
  {'human resources manager': 91.0}]}
{'key': '2d animator',
 'Results': [{'artist': 51.0},
  {'animator': 45.0},
  {'freelancer': 12.0},
]}

Tags: keymanagerauditorresultsaccountingresourcesofficehuman
2条回答

我不久前写了这段代码,它将根据存储的列表长度对字典进行排序,至少对python 3.7+适用

dict1 = {'key1': [0,1,3,4,5], 'key2':[1,2], 'key3': [4,5,6]}

dict1_sorted = {k2: dict1[k2] for k2 in sorted(dict1, key=lambda k: len(dict1[k]))}

编辑

由于您示例中的dic不是字典而是字典列表,因此您没有尝试“根据值的长度对字典进行排序”,而是尝试根据其包含的字典的值的长度对列表进行排序,这可以通过以下操作完成:

dic = [{'key': 'accounting manager',
        'Results': [{'accountant': 3666.0},
                    {'controller': 1254.0},
                    {'financial analyst': 553.0},
                    {'accounting clerk': 490.0},
                    {'office manager': 355.0},
                    {'auditor': 309.0},
                    {'accounts payable clerk': 284.0},
                    {'finance manager': 260.0}]},
       {'key': 'employee relations manager',
        'Results': [{'human resources generalist': 142.0},
                    {'service manager': 121.0},
                    {'human resources specialist': 120.0},
                    {'engineering manager': 96.0},
                    {'human resources manager': 91.0}]},
       {'key': '2d animator',
        'Results': [{'artist': 51.0},
                    {'animator': 45.0},
                    {'freelancer': 12.0}]}
       ]

## assending order
dic_sorted = sorted(dic, key=lambda k: len(k['Results']))
print(dic_sorted)


## decending order 
dic_sorted = sorted(dic, key=lambda k: len(k['Results']), reverse=True)

假设您的输入是一个字典列表,可以使用以下表达式按照“Results”键的值的长度对每个元素进行反向排序:

sorted(dic, key=lambda k: len(k['Results']),reverse=True)

相关问题 更多 >