在Python中对多级字典进行排序

3
我需要按照 'sales_min' 键的值对以下字典进行排序:
mydict = {
    'NATION': {'sales_max': 1000, 'sales_min': 500, ...}, 
    'LOCAL':  {'sales_max': 250, 'sales_min': 0, ...},
    'REGION': {'sales_max': 500, 'sales_min': 250, ...}, 
    ...
}

我还没有找到一个好的方法来做这件事。欢迎提出任何建议。

谢谢。


2
你需要一个有序字典还是只需要遍历排序后的项目并执行一些操作,例如输出? - jamylak
Python Pandas库可能对你有用。这似乎是一个适合使用DataFrame而不是字典的很好的案例。 - ely
2个回答

6
>>> 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
@tufla:温斯顿的答案给出了一个元组列表,而我的答案给出了一个可以通过键索引的映射。这不是哪个更简单的问题,而是根据情况选择哪个更合适。 - Ignacio Vazquez-Abrams

4
请注意,您实际上无法对字典进行排序,因为字典没有定义的顺序。但是您可以将其转换为已排序的列表:
sorted(mydict.items(), key = lambda x: x[1]['sales_min'])

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接