我有一本这样的字典:
{'xxx':['xxx', 0], 'yyy':['yyy', 2], 'zzz':['zzz', 3]}
我想按每个键的值中从大到小的第二项对字典进行排序,所以我想要的结果是这样的:
{'zzz':['zzz', 3], 'yyy':['yyy', 2], 'xxx':['xxx', 0]}
有没有办法做到这一点?谢谢!请注意,可能会有具有相同值的字典项
答案 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)
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]}
希望获得帮助