假设我有一个像这样的字典:
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}
答案 0 :(得分:5)
您可以将键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)
。
答案 1 :(得分:2)
使用sorted
和自定义键。
例如:
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}
答案 2 :(得分:2)
我会将数据转换为排序列表:
data = {'amazon': [668, 667, 879], 'flipkart': [678], 'hey': [89,79]}
sorted_data = sorted([{'name':k, 'val':len(v)} for k,v in data.items()],
key=lambda x: x['val'],
reverse=True)
print(sorted_data)
输出:
[{'name': 'amazon', 'val': 3}, {'name': 'hey', 'val': 2}, {'name': 'flipkart', 'val': 1}]
答案 3 :(得分:2)
两个建议的答案在每个项目上都叫两次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}
答案 4 :(得分:2)
您可以执行以下操作
dicl = {'amazon': [668, 667, 879], 'flipkart': [678], 'hey' : [89,79]}
cov_m = {k : len(v) for k,v in sorted(dicl.items(), key=lambda x:x[1])}
输出
{'amazon': 3, 'hey': 2, 'flipkart': 1}