【问题标题】:How to sort a dictionary with respect of length of values?如何根据值的长度对字典进行排序?
【发布时间】:2021-02-03 12:45:00
【问题描述】:

我有一个儿子档案。 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},
]}

【问题讨论】:

  • 您发布的结构不正确,因为它不是字典列表。

标签: python json list dictionary


【解决方案1】:

我不久前编写了这段代码,它将根据存储的列表长度对字典进行排序,它至少应该适用于 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 不是字典而是字典列表,因此您不是在尝试“根据值的长度对字典进行排序”,而是尝试对基于 list 的关于它包含的字典的值的长度,可以通过以下方式完成:

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)

【讨论】:

  • TypeError: 列表索引必须是整数或切片,而不是字典
  • 这不是我的问题
  • '如何根据值的长度对字典进行排序?'是您的问题,您可以复制更多 dic[i] 的示例以便我进行测试
  • dic 是一个列表,而不是字典
  • @elham--您没有发布字典列表(即缺少外部 [] 和字典之间的逗号)。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多