按优先级排序Python字典

时间:2019-05-16 19:56:32

标签: python sorting python-3.7

我有一个由(名称,值)对组成的python字典

pyDictionary = {"Bob":12,"Mellissa":12,"roger":13}

我想做的是获得上述字典的排序版本,在该排序中,首先给出该值的真值,然后进行排序,如果两对值相同,则应通过字典比较进行比较名字。

我如何在python3.7中做到这一点?

2 个答案:

答案 0 :(得分:6)

您可以将sortedkey一起使用,并根据结果构建一个OrderedDict以保持顺序。

(最后一步仅在python 3.6 <中是必需的,在python 3.7中,字典按其键插入时间排序)


from collections import OrderedDict
d = {"Mellissa":12, "roger":13, "Bob":12}

OrderedDict(sorted(d.items(), key=lambda x: (x[1], x[0])))
# dict(sorted(d.items(), key=lambda x: (x[1], x[0]))) # for Python 3.7
# [('Bob', 12), ('Mellissa', 12), ('roger', 13)]

或者您也可以使用operator.itemgetter直接从每个元组分别获取valuekey

OrderedDict(sorted(d.items(), key=itemgetter(1,0)))
# dict(sorted(d.items(), key=itemgetter(1,0))) # python 3.7
# [('Bob', 12), ('Mellissa', 12), ('roger', 13)]

答案 1 :(得分:1)

您可以使用可反转键值元组顺序的键功能对字典项进行排序:

dict(sorted(pyDictionary.items(), key=lambda t: t[::-1]))