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()
仅在Python 2.7和Python 3.2(及更高版本)上可用collections.OrderedDict
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]])