python:在一个键上对一个dict进行排序

python:在一个键上对一个dict进行排序,python,Python,像这样的数据结构 { 'ford': {'count': 3}, 'mazda': {'count': 0}, 'toyota': {'count': 1} } 在顶级dict的值中,按count的值排序的最佳方法是什么 d = {'ford': {'count': 3}, 'mazda': {'count': 0}, 'toyota': {'count': 1}} >>> sorted(d.items(), key=lambda (k,

像这样的数据结构

{
  'ford': {'count': 3},
  'mazda': {'count': 0},
  'toyota': {'count': 1}
 }
在顶级dict的值中,按
count
的值排序的最佳方法是什么

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})]
要将结果保留为字典,可以使用:

版本关注点:

  • 在Python2.x上,可以使用
    d.iteritems()
    而不是
    d.items()
    来提高内存效率
  • collections.OrderedDict
    仅在Python 2.7和Python 3.2(及更高版本)上可用

dicitonary是一种无序的数据结构,因此无法对其进行排序。您可以从字典
d
中创建一个排序列表(或者在Python 2.7中,创建一个
orderedict
):

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

此列表可用作
集合的构造函数参数。OrderedDict

更简洁的方法是使用itemgetter,然后使用该值按照另一个建议构建有序dict

>>> from operator import itemgetter
>>> sorted(s,key=itemgetter,reverse=True)
['ford', 'toyota', 'mazda']

如果要按值中的某个项对字典进行排序,则不能将结果保留为dict,因为在dict中,元素添加的顺序不保留。因为你必须使用OrderedDict。一种解决方案是,排序后,从(键、值)元组列表中生成OrderedDict


我认为dict是一个哈希表,所以不能对它进行排序。尝试将排序后的值存储到列表中,该列表可以排序:

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

如果你真的想保留这些密钥,也可以将它们添加到列表中。只要确保在访问列表时,偶数索引(0,2,4,…)是键,奇数索引是值(1,3,5,…)

如果您的dict名为x,则可以获得键列表: 排序的(x,key=lambda:x[a][count']) 其中,x是: [‘马自达’、‘丰田’、‘福特’]

然后您可以打印: 对于排序的x中的i: 打印x[i]

结果: {'count':0} {'count':1}
{'count':3}

字典是无序的数据类型,无法对其进行排序。您可以使用
collections.OrderedDict
>>> collections.OrderedDict(sorted(d.iteritems(),key=lambda x:x[1]["count"],reverse=True))
OrderedDict([('ford', {'count': 3}), ('toyota', {'count': 1}), ('mazda', {'count': 0})])
>>> 
l = []
for x in sorted(dictionary.keys()):
    l.append([dictionary[x]])