Python:按键对一个字典进行排序

3
一种像这样的数据结构。
{
  'ford': {'count': 3},
  'mazda': {'count': 0},
  'toyota': {'count': 1}
 }

什么是在顶层字典的值内按count值排序的最佳方法?

字典是一种无序的数据类型,它不能被排序。您可以使用 collections.OrderedDict - 0xc0de
6个回答

11
d = {'ford': {'count': 3},
     'mazda': {'count': 0},
     'toyota': {'count': 1}}

>>> sorted(d.items(), key=lambda (k, v): v['count'])
[('mazda', {'count': 0}), ('toyota', {'count': 1}), ('ford', {'count': 3})]
为了保持结果为字典,可以使用collections.OrderedDict
>>> from collections import OrderedDict
>>> ordered = OrderedDict(sorted(d.items(), key=lambda (k, v): v['count']))
>>> ordered
OrderedDict([('mazda', {'count': 0}), ('toyota', {'count': 1}), ('ford', {'count': 3})])
>>> ordered.keys()          # this is guaranteed to come back in the sorted order
['mazda', 'toyota', 'ford']
>>> ordered['mazda']        # still a dictionary
{'count': 0}

版本相关:

  • 在 Python 2.x 中,你可以使用 d.iteritems() 替代 d.items() 来获得更好的内存效率。
  • collections.OrderedDict 只在 Python 2.7 和 Python 3.2(及以上版本)中可用。

2

字典是一种无序的数据结构,因此不能进行排序。您可以从字典 d 创建一个已排序的列表(或在 Python 2.7 中使用 OrderedDict):

sorted(d.iteritems(), key=lambda item: item[1]["count"])

这个列表可以作为 collections.OrderedDict 的构造函数参数。


0
一个更简洁的方法是使用 itemgetter,然后使用该值构建有序字典,就像其他人建议的那样。
>>> from operator import itemgetter
>>> sorted(s,key=itemgetter,reverse=True)
['ford', 'toyota', 'mazda']

0
如果您想按值中的某个项对字典进行排序,则无法将结果保留为字典,因为在字典中,元素添加的顺序未被保留。 这时您需要使用OrderedDict。 一种解决方案是,一旦排序完成,就可以将(键,值)元组的列表转换成OrderedDict。
>>> collections.OrderedDict(sorted(d.iteritems(),key=lambda x:x[1]["count"],reverse=True))
OrderedDict([('ford', {'count': 3}), ('toyota', {'count': 1}), ('mazda', {'count': 0})])
>>> 

0
如果你有一个名为x的字典,那么你可以获取一个键列表: sorted_x = sorted(x, key=lambda a: x[a]['count']) 其中sorted_x是: ['马自达','丰田','福特']
然后你可以打印: for i in sorted_x: print x[i]
结果: {'count': 0} {'count': 1} {'count': 3}

0

我认为一个dict就是一个哈希表,因此实际上不能对其进行排序。尝试将已排序的值存储到列表中,这样可以排序:

l = []
for x in sorted(dictionary.keys()):
    l.append([dictionary[x]])

如果你真的想保留这些键,或许可以将它们添加到列表中。但是请确保在访问列表时,偶数索引(0、2、4...)是键,奇数索引是值(1、3、5...)。

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