python - 按多个项目和每个项目的不同反向值对字典列表进行排序

标签 python

我有以下对象列表,我想对它们进行排序,首先是所有带有 k2 == True 的字典(按字母顺序排列的 A-Z),然后是所有带有 k2 == False 的字典 (按字母顺序 A-Z)。 我尝试了这样的 sorted(test, key=lambda k: (k['k2'], k['k1'].lower()), reverse=(True,False)) 但是它不起作用。

>>> test = [
...     {"k1": "qsd", "k2": True},
...     {"k1": "JKd", "k2": False},
...     {"k1": "Ukz", "k2": False},
...     {"k1": "aqd", "k2": True},
...     {"k1": "Asd", "k2": True},
...     {"k1": "wef", "k2": False},
...     {"k1": "Wgr", "k2": True},
...     {"k1": "weg", "k2": False},
...     {"k1": "lfe", "k2": True},
... ]
>>>
>>> test = sorted(test, key=lambda k: (k['k2'], k['k1'].lower()), reverse=True)
>>> for t in test:
...     print(t)
...
{'k1': 'Wgr', 'k2': True}
{'k1': 'qsd', 'k2': True}
{'k1': 'lfe', 'k2': True}
{'k1': 'Asd', 'k2': True}
{'k1': 'aqd', 'k2': True}
{'k1': 'weg', 'k2': False}
{'k1': 'wef', 'k2': False}
{'k1': 'Ukz', 'k2': False}
{'k1': 'JKd', 'k2': False}

我正在寻找:

{'k1': 'aqd', 'k2': True}
{'k1': 'Asd', 'k2': True}
{'k1': 'lfe', 'k2': True}
{'k1': 'qsd', 'k2': True}
{'k1': 'Wgr', 'k2': True}
{'k1': 'JKd', 'k2': False}
{'k1': 'Ukz', 'k2': False}
{'k1': 'wef', 'k2': False}
{'k1': 'weg', 'k2': False}

最佳答案

你已经很接近了,请使用而不是 k['k2'] 作为第一个排序器。

>>> test.sort(key=lambda k: (not k['k2'], k['k1'].lower()))
>>> test
[{'k1': 'aqd', 'k2': True},
 {'k1': 'Asd', 'k2': True},
 {'k1': 'lfe', 'k2': True},
 {'k1': 'qsd', 'k2': True},
 {'k1': 'Wgr', 'k2': True},
 {'k1': 'JKd', 'k2': False},
 {'k1': 'Ukz', 'k2': False},
 {'k1': 'wef', 'k2': False},
 {'k1': 'weg', 'k2': False}]
k['k2'] 为 True 且 False (=0) <时,

not k['k2']False正确 (=1)。

关于python - 按多个项目和每个项目的不同反向值对字典列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55170954/

相关文章:

python - Python time.perf_counter() 返回的小数秒到底是多少?

用于检查服务器状态的 Python 脚本

python - 如何在 Spyder/Anaconda 中使用 Python 从 Azure Blob 下载/上传文件

python - 当目标函数有多个参数时如何使用 scipy.optimize minimize_scalar?

python - python 中的排列但只允许每个元素最多使用 n 次

python - 在 Python 中打印函数时回显结果的正确术语

python - 多处理 Pool.imap 坏了?

python - 在 Windows 8 (x64) 中安装 PyOpenCL "fatal error: CL/cl.h: No such file or directory"错误

python - 如何从具有 2 个列表的列表中获取相同的索引元素

python循环索引