根据最大值的长度从python列出的字典中查找项目?

时间:2019-08-29 11:28:50

标签: python python-3.x list dictionary set

假设我有一个像这样的字典:

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}

5 个答案:

答案 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}