gpt4 book ai didi

python - 如何按两个元素对字典进行排序,只反转一个

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:05 28 4
gpt4 key购买 nike

考虑以下字典:

data = {'A':{'total':3},
'B':{'total':5},
'C':{'total':0},
'D':{'total':0},
}

上面的所需顺序是 B、A、C、D。按总数降序排列,然后按关键字升序排列。

当我调用 sorted(data, key=lambda x: (data[x]['total'], x), reverse=True)我得到 B、A、D、C,因为在两个键上都调用了 reverse。

有没有有效的方法来解决这个问题?

最佳答案

负数 总计排序,这将反向将总计倒序排列,而无需使用 reverse=True。然后按前向顺序在键上打破关系:

sorted(data, key=lambda x: (-data[x]['total'], x))

演示:

>>> data = {'A':{'total':3},
... 'B':{'total':5},
... 'C':{'total':0},
... 'D':{'total':0},
... }
>>> sorted(data, key=lambda x: (-data[x]['total'], x))
['B', 'A', 'C', 'D']

此技巧仅适用于排序键中的数字组件;如果您有多个键需要更改排序方向,但不是数字,则必须进行多次排序(多次排序,从最后一个键到第一个键):

# when you can't take advantage of numerical values to reverse on
# you need to sort repeatedly from last key to first.
# Here, sort forward by dict key, then in reverse by total
bykey = sorted(data)
final = sorted(bykey, key=lambda x: data[x]['total'], reverse=True)

之所以可行,是因为 Python 排序算法稳定;如果这两个元素的当前排序键结果相等,则这两个元素保持它们的相对位置。

关于python - 如何按两个元素对字典进行排序,只反转一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40426209/

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