Rob*_*ugy 3 python sorting dictionary list python-3.x
我正在尝试对词典列表进行排序。我的目标是以相同的方式对具有多个(可能是相同的)键的字典进行排序,即使字典的顺序不同或字典中的键的顺序也不同。
在Python 2中,我使用了以下内容:
a = [{1: 2, 7: 8}, {7: 8, 3: 4}, {5: 6}]
b = [{3: 4, 7: 8}, {7: 8, 1: 2}, {5: 6}]
a.sort()
b.sort()
a
Out[20]: [{5: 6}, {1: 2, 7: 8}, {3: 4, 7: 8}]
b
Out[21]: [{5: 6}, {1: 2, 7: 8}, {3: 4, 7: 8}]
Run Code Online (Sandbox Code Playgroud)
这成功实现了我创建两个看起来完全相同的排序字典的目标。
我正在尝试在Python 3中做同样的事情,其中.sort()对于字典列表不起作用。
我尝试了不同的方法。
1。
sorted(a, key=lambda d: max(d.keys()))
Run Code Online (Sandbox Code Playgroud)
这不起作用:
a = [{1: 2, 7: 8}, {3: 4, 7: 8}, {5: 6}]
b = [{3: 4, 7: 8}, {1: 2, 7: 8}, {5: 6}]
a2 = sorted(a, key=lambda d: max(d.keys()))
b2 = sorted(b, key=lambda d: max(d.keys()))
a2
Out[1]: [{5: 6}, {1: 2, 7: 8}, {7: 8, 3: 4}]
b2
Out[2]: [{5: 6}, {3: 4, 7: 8}, {7: 8, 1: 2}]
Run Code Online (Sandbox Code Playgroud)
2。
a2 = sorted([list(zip(x.keys(),x.values())) for x in a])
a3 = [{k: v for (k,v) in x} for x in a2]
Run Code Online (Sandbox Code Playgroud)
这不起作用:
a = [{1: 2, 7: 8}, {7: 8, 3: 4}, {5: 6}]
b = [{3: 4, 7: 8}, {7: 8, 1: 2}, {5: 6}]
a2 = sorted([list(zip(x.keys(),x.values())) for x in a])
a3 = [{k: v for (k,v) in x} for x in a2]
b2 = sorted([list(zip(x.keys(),x.values())) for x in b])
b3 = [{k: v for (k,v) in x} for x in b2]
a3
Out[1]: [{1: 2, 7: 8}, {5: 6}, {7: 8, 3: 4}]
b3
Out[2]: [{3: 4, 7: 8}, {5: 6}, {7: 8, 1: 2}]
Run Code Online (Sandbox Code Playgroud)
有谁知道如何在Python 3中获得Python 2结果?
keys可以使用以下命令对所有字典进行排序:
a.sort(key=lambda d: d.keys())
b.sort(key=lambda d: d.keys())
Run Code Online (Sandbox Code Playgroud)
为了获得想要的结果,我们需要按以下顺序对键进行升序排序:
a.sort(key=lambda d: sorted(list(d.keys()), reverse=True))
b.sort(key=lambda d: sorted(list(d.keys()), reverse=True))
Run Code Online (Sandbox Code Playgroud)
得到以下结果:
>>> a
[{5: 6}, {1: 2, 7: 8}, {3: 4, 7: 8}]
>>> b
[{5: 6}, {1: 2, 7: 8}, {3: 4, 7: 8}]
Run Code Online (Sandbox Code Playgroud)
编辑:为了也基于值进行排序(在注释中要求),可以使用以下方法:
a.sort(key=lambda d: sorted(list(d.keys()) + sorted(list(d.values())), reverse=True))
b.sort(key=lambda d: sorted(list(d.keys()) + sorted(list(d.values())), reverse=True))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2691 次 |
| 最近记录: |