假设我有一本字典,如:
dicl = {'amazon': [668, 667, 879], 'flipkart': [678], 'hey': [89,79]}我想根据项目长度的降序打印字典项。
我想要的输出:
{'amazon' : 3, 'hey' : 2, 'flipkart' : 1}但是我得到的结果是按项目的顺序排序,而我想要根据项目的降序显示项目?
我试过的是:
cov_m = {k : len(v) for k, v in sorted(dicl.items())}当前产出:
{'amazon' : 3, 'flipkart' : 1, 'hey' : 2}发布于 2019-08-29 11:32:19
可以将键lambda函数作为参数传递给sorted函数,以指定排序条件:
dicl = {'amazon': [668, 667, 879], 'flipkart' : [678], 'hey' : [89,79]}
cov_m = {k : len(v) for k, v in sorted(dicl.items(), key = lambda i : -len(i[1]))}
print(cov_m)输出:
{'amazon': 3, 'hey': 2, 'flipkart': 1}在这里,len(i[1])是值的长度,我按-len(i[1]) (负长度)排序,因为您希望它们按降序排列,如果使用更高级的排序标准,则应该使用, reverse = True)。
发布于 2019-08-29 11:33:06
使用带有自定义键的sorted。
Ex:
dicl = {'amazon': [668, 667, 879], 'flipkart': [678], 'hey' : [89,79]}
print({k: len(v) for k, v in sorted(dicl.items(), key=lambda x: len(x[1]), reverse=True)})输出:
{'amazon': 3, 'hey': 2, 'flipkart': 1}发布于 2019-08-29 11:42:22
两个建议的答案都在每个项目上调用len()两次。为什么不叫一次呢?(不是为了表演,而是为了冷静)
码
dicl = {'amazon': [668, 667, 879], 'flipkart': [678], 'hey' : [89,79]}
length_dict = {k: len(v) for k, v in dicl.items()}
# Sort on length-values in dict, use inverse of length as @MrGeek suggests
sorted_on_values = sorted(
length_dict.items(),
key=lambda d: -d[1]
)
sorted_dict = dict(sorted_on_values)输出
{'amazon': 3, 'hey': 2, 'flipkart': 1}https://stackoverflow.com/questions/57709191
复制相似问题