从字典列表中我试图返回具有最高价值的字典或词典。这个问题与this问题类似,但略有不同。
给出一个词典列表:
ld = [{'prop': 'foo', 'size': 100}, {'prop': 'boo', 'size': 200}, {'prop': 'loo', 'size': 200}]
我想返回得分最高的两个词典,即boo
和loo
。
如果我运行上述问题中显示的代码:
max(ld, key=lambda d: d['size'])
我只获得了第一个返回的最高字典。
提前致谢,如果您需要明确的话,请告诉我。
答案 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;
}
来从字典中选择一个元素。在您的代码中,它将用于获取第二个和第一个最大元素。