获取两个dicts具有相等值的dicts列表的最大值索引

时间:2016-01-31 16:32:46

标签: python list dictionary

从字典列表中我试图返回具有最高价值的字典或词典。这个问题与this问题类似,但略有不同。

给出一个词典列表:

ld = [{'prop': 'foo', 'size': 100}, {'prop': 'boo', 'size': 200}, {'prop': 'loo', 'size': 200}]

我想返回得分最高的两个词典,即booloo

如果我运行上述问题中显示的代码:

max(ld, key=lambda d: d['size'])

我只获得了第一个返回的最高字典。

提前致谢,如果您需要明确的话,请告诉我。

1 个答案:

答案 0 :(得分:0)

恐怕在ld = [{'prop': 'foo', 'size': 100}, {'prop': 'boo', 'size': 300}, {'prop': 'loo', 'size': 700}, {'prop': 'loo', 'size': 200}] print(sorted(range(len(ld)), key=lambda index: ld[index]['size'])[-2:]) indices = sorted(range(len(ld)), key=lambda index: ld[index]['size'])[-2:] for index in indices: print(index) print(ld[index]) 复杂性中没有简单的单行代码。如果性能对您来说不是问题,我建议使用sort:

[1, 2]                                                                                                                                                                                                                            
1                                                                                                                                                                                                                                 
{'size': 300, 'prop': 'boo'}                                                                                                                                                                                                      
2                                                                                                                                                                                                                                 
{'size': 700, 'prop': 'loo'}  

结果:

O(n)

如果您需要线性复杂性,我认为您必须编写自己的代码,请参阅inline group variables block

请注意答案在Python 3中。

如果需要def myfun(mylist, getter): for item in mylist: print(getter(item)) myfun(ld, lambda item: item['size']) 解决方案的灵活性(即字典的哪个元素决定订单),您可以使用类似的东西:

getter

所以在这个简单的例子中,我们使用一个函数(由lambda创建)parserFxn = function parserFxn(input){ var data = input.split(""); var init = []; for(var i = 0, ii = data.length; i < ii; i++){ if(data[i] !== "$"){ init.push(data[i]); } } var result = init.join(""); return result; } 来从字典中选择一个元素。在您的代码中,它将用于获取第二个和第一个最大元素。