【问题标题】:Sorting multilevel dict in python在python中对多级dict进行排序
【发布时间】:2012-08-18 16:47:52
【问题描述】:

我需要按“sales_min”键的值对以下字典进行排序:

mydict = {
    'NATION': {'sales_max': 1000, 'sales_min': 500, ...}, 
    'LOCAL':  {'sales_max': 250, 'sales_min': 0, ...},
    'REGION': {'sales_max': 500, 'sales_min': 250, ...}, 
    ...
}

我还没有找到一个好的方法来做到这一点。任何建议表示赞赏。

谢谢。

【问题讨论】:

  • 你需要一个有序的字典,还是你只需要浏览排序的项目并对它们做一些事情,例如。输出
  • Python Pandas 库可能对您有用。对于 DataFrame 而不是 dict 的 dict,这看起来是一个非常好的案例。

标签: python sorting dictionary


【解决方案1】:
>>> collections.OrderedDict(sorted(mydict.iteritems(), key=lambda (k, v):
       v['sales_min']))
OrderedDict([('LOCAL', {'sales_max': 250, 'sales_min': 0}), ('REGION', {'sales_max': 500, 'sales_min': 250}), ('NATION', {'sales_max': 1000, 'sales_min': 500})])

【讨论】:

  • 非常感谢,它工作得很好,但是@winston-ewert 的解决方案似乎更简单。
  • @tufla:Winston 的回答为您提供了一个元组列表,而我的回答为您提供了一个可以按键索引的映射。这不是哪个更简单的问题,而是在特定情况下哪个合适。
  • 明白。再次感谢您的解释!
【解决方案2】:

请注意,您实际上无法对 dict 进行排序,因为 dict 没有定义的顺序。但你可以将其转换为排序列表:

sorted(mydict.items(), key = lambda x: x[1]['sales_min'])

他们的 lambda 从 items() 列表中获取一个元素并返回销售最小值。通过将此函数作为关键参数传递,python 将按此对其进行排序。

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    相关资源
    最近更新 更多