Python-按值中的第二项对嵌套字典进行排序

时间:2019-04-24 04:54:47

标签: python python-3.x dictionary

我有一本这样的字典:

{'xxx':['xxx', 0], 'yyy':['yyy', 2], 'zzz':['zzz', 3]}

我想按每个键的值中从大到小的第二项对字典进行排序,所以我想要的结果是这样的:

{'zzz':['zzz', 3], 'yyy':['yyy', 2], 'xxx':['xxx', 0]}

有没有办法做到这一点?谢谢!请注意,可能会有具有相同值的字典项

4 个答案:

答案 0 :(得分:3)

在python版本中,命令是有序的(CPython3.6 m Python3.7+)使用sorted且反向激活并自定义key

>>> d = {'xxx':['xxx', 0], 'yyy':['yyy', 2], 'zzz':['zzz', 3]}
>>> d = dict(sorted(d.items(), reverse=True, key=lambda x: x[1][1]))
>>> d
{'zzz': ['zzz', 3], 'yyy': ['yyy', 2], 'xxx': ['xxx', 0]}

如果不是(Python3.5或更低),请使用OrderedDict

>>> from collections import OrderedDict
>>> d = {'xxx':['xxx', 0], 'yyy':['yyy', 2], 'zzz':['zzz', 3]}
>>> d = OrderedDict(sorted(d.items(), reverse=True, key=lambda x: x[1][1]))
>>> d
OrderedDict([('zzz', ['zzz', 3]), ('yyy', ['yyy', 2]), ('xxx', ['xxx', 0])])

答案 1 :(得分:0)

Python中的

dicts是按插入顺序排序的(对于Python> = 3.7),因此它们的排序方式实际上不能与list相同。如果要进行分类,则应使用其他容器。

尽管如此,对于Python> = 3.7(尽管它将在CPython 3.6中运行),您可以根据原始list构建的tuples中的dict分类创建新的字典:

data = {'xxx':['xxx', 0], 'yyy':['yyy', 2], 'zzz':['zzz', 3]}
result = dict(sorted(data.items(), reverse=True, key=lambda p: p[1][1]))

答案 2 :(得分:-1)

>>> d = {'xxx':['xxx', 0], 'yyy':['yyy', 2], 'zzz':['zzz', 3]}
>>> sorted(d.items(), key=lambda kv: kv[1][1], reverse=True)
[('zzz', ['zzz', 3]), ('yyy', ['yyy', 2]), ('xxx', ['xxx', 0])]

答案 3 :(得分:-1)

我的朋友,您可以使用排序方法:

尝试一下:

x  = {'xxx':['xxx', 0], 'yyy':['yyy', 3], 'zzz':['zzz', 2],'aaa':['aaa',1]}

newlist=sorted(x.items(), key=lambda kv: kv[1][1], reverse=True)
print (newlist) 

输出:

[('yyy', ['yyy', 3]), ('zzz', ['zzz', 2]), ('aaa', ['aaa', 1]), ('xxx', ['xxx', 0])]

新列表类型为列表。

如果您想使用字典,只需将dict()用作:

newlist = dict(sorted(x.items(), key=lambda kv: kv[1][1], reverse=True))

输出:{'yyy': ['yyy', 3], 'zzz': ['zzz', 2], 'aaa': ['aaa', 1], 'xxx': ['xxx', 0]}

希望获得帮助