gpt4 book ai didi

python - 在 Python 3 中对字典列表进行排序

转载 作者:行者123 更新时间:2023-12-02 01:44:52 24 4
gpt4 key购买 nike

我正在尝试对字典列表进行排序。我的目标是以相同的方式对具有多个(可能相同)键的字典进行排序,即使字典的顺序不同或者键在字典中的顺序不同。

在 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}]

这成功地实现了我创建两个看起来完全相同的排序字典的目标。

我试图在 Python 3 中做同样的事情,其中​​ .sort() 不适用于字典列表。

我尝试过不同的方法。

1.

sorted(a, key=lambda d: max(d.keys()))

这不起作用:

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}]

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]

这不起作用:

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}]

有人知道如何在 Python 3 中获得 Python 2 结果吗?

最佳答案

对字典中的所有进行排序可以通过以下方式完成:

a.sort(key=lambda d: d.keys())
b.sort(key=lambda d: d.keys())

为了获得您想要的结果,我们需要按升序对键进行排序,如下所示:

a.sort(key=lambda d: sorted(list(d.keys()), reverse=True))
b.sort(key=lambda d: sorted(list(d.keys()), reverse=True))

这给出了以下结果:

>>> a
[{5: 6}, {1: 2, 7: 8}, {3: 4, 7: 8}]
>>> b
[{5: 6}, {1: 2, 7: 8}, {3: 4, 7: 8}]

编辑:为了也根据值进行排序(在评论中询问),以下可能有效:

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))

关于python - 在 Python 3 中对字典列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47795746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com