gpt4 book ai didi

python - 如何创建按字典中值的数量排序的理解?

转载 作者:太空宇宙 更新时间:2023-11-04 04:22:20 25 4
gpt4 key购买 nike

目前,我正在努力学习更多关于如何使用推导式的知识。但是,我现在遇到了这个问题。

我有的字典:

d =  {'Second': {('Carrie', 3), ('Diane', 3), ('Bob', 3)},
'Third': {('Alan', 2), ('Diane', 5)},
'Fourth': {('Carrie', 2), ('Alan', 5)},
'First': {('Bob', 5), ('Carrie', 5), ('Alan', 1), ('Diane', 1)} }

我正在尝试按每个键所具有的值的数量对其进行排序,以便返回时看起来像这样。如果键都具有相同数量的值,它将按字母顺序排序。

期望的输出:

['First', 'Second', 'Fourth', 'Third']

然而,到目前为止,我不确定如何按值的长度排序:

d = {'Second': {('Carrie', 3), ('Diane', 3), ('Bob', 3)}, 'Third': {('Alan', 2), ('Diane', 5)}, 'Fourth': {('Carrie', 2), ('Alan', 5)}, 'First': {('Bob', 5), ('Carrie', 5), ('Alan', 1), ('Diane', 1)} }

def sorting(d):
return sorted([key for key, value in db.items(), key = lambda x: -len( )

最佳答案

创建一个将键映射到它们长度的字典,然后对其调用 sorted

d2 = {k: len(d[k]) for k in d}
sorted(d2, key=d2.get, reverse=True)
# ['First', 'Second', 'Third', 'Fourth']

使用 lambda 将消除对映射的需要,但也意味着键是一个 lambda 函数,...但它是:

sorted(d, key=lambda k: (len(d[k]), k), reverse=True)
# ['First', 'Second', 'Third', 'Fourth']

这里,键回调返回一个元组 (len(d[k]), k) 确保首先按长度排序,然后按字母顺序排序。


作为一个愚蠢的单行者,你可以这样做:

(lambda d: sorted(d, key=d.get, reverse=True))({k: len(d[k]) for k in d}) 
# ['First', 'Second', 'Third', 'Fourth']

这只是赋值表达式的替代品,我在等待 python-3.8。

关于python - 如何创建按字典中值的数量排序的理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54246701/

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