如何在Python中按'votes'
排序词典?
{
1 : {
'votes' : 2,
'id' : 10
},
2 : {
'votes' : 10,
'id' : 12
},
3 : {
'votes' : 98,
'id' : 14
}
}
结果:
{
3 : {
'votes' : 98,
'id' : 14
},
2 : {
'votes' : 10,
'id' : 12
},
1 : {
'votes' : 2,
'id' : 10
}
}
答案 0 :(得分:4)
您可以使用OrderedDict
:
>>> from collections import OrderedDict
>>> od = OrderedDict(sorted(d.items(),
key=lambda t: t[1]['votes'],
reverse=True))
>>> od
OrderedDict([(3, {'votes': 98, 'id': 14}),
(2, {'votes': 10, 'id': 12}),
(1, {'votes': 2, 'id': 10})])
其中d
是您原来的字典。
答案 1 :(得分:3)
字典是未排序的,如果您希望能够按特定顺序访问字典中的元素,则可以使用jcollado的答案中的OrderedDict
,或者只按任意顺序对键列表进行排序您感兴趣的指标,例如:
data = {1: {'votes': 2, 'id': 10}, 2: {'votes': 10, 'id': 12}, 3: {'votes': 98, 'id': 14}}
votes_order = sorted(data, key=lambda k: data[k]['votes'], reverse=True)
for key in votes_order:
print key, ':', data[key]
输出:
3 : {'votes': 98, 'id': 14}
2 : {'votes': 10, 'id': 12}
1 : {'votes': 2, 'id': 10}
答案 2 :(得分:0)
标准词典没有订单,因此对它们进行排序毫无意义。这些词典都完全一样。
也许你真正想要的是一个清单?
aslist = originaldict.values()
aslist.sort(key=lambda item:item['votes'], reverse=True)
这将从您的dict中提取项目作为列表,并按votes
求助于列表。
答案 3 :(得分:0)
您还可以对字典中的项目进行排序:
print sorted(d.items(), key=lambda x: x[1]['votes'], reverse=True)
像弗朗西斯的建议一样,但你知道每件物品的原始钥匙。