在Python 3.6+中按值对字典排序

时间:2018-09-02 23:45:46

标签: python python-3.x performance sorting dictionary

经过几次尝试,我一直在寻找一种用其值对Python字典进行排序的方法:

a = {<populated dict...>}
a = {v: k for k, v in a.items()}
a = {v: k for k, v in sorted(a.items())}

此代码似乎有效,但是我认为它的性能很差,有没有更好的方法?

3 个答案:

答案 0 :(得分:6)

您不需要进行双键/值交换,您可以这样做:

a = {k: v for k, v in sorted(a.items(), key=lambda x: x[1])}

sorted DOCS

测试代码:

data = dict(a=1, b=3, c=2)
print(data)
data_sorted = {k: v for k, v in sorted(data.items(), key=lambda x: x[1])}
print(data_sorted)

结果:

从CPython 3.6:

{'a': 1, 'b': 3, 'c': 2}
{'a': 1, 'c': 2, 'b': 3}

答案 1 :(得分:0)

from collections import OrderedDict

否则,以所需顺序创建键列表。

答案 2 :(得分:0)

以下代码对我有用。不确定效率如何。

sorted_list_by_value=sorted(data_dict, key=data_dict.__getitem__)