2017-02-24 50 views
0

我想从词典列表中返回具有最高值的词典。所以,因为'key1'包含5个字符,所以我只想让这个字典回来,因为这是我唯一关心的。我需要来自不同关键字的价值,但需要具有最高价值的字典。应该很容易,但我错过了一些东西。谢谢!在一系列词典中,返回包含Python中最高值的完整词典

例:

[{'key1': 1, 'key2': 'string'}, 
{'key1': 3, 'key2': 'string'}, 
{'key1': 5, 'key2': 'string with highest value'}, 
] 

我需要得到的是字典 '{' 键1 ':5, 'KEY2': '串最高值'}'

+2

'max(ld,key = lambda d:d ['key1'])['key2']'其中'ld'是您的词典列表。 –

回答

3
max(L, key=operator.itemgetter('key1')) 
+0

谢谢,这工作。这是否等于或比Steven的建议更快? – JTFouquier

+1

@ jennifer06262016:它会更快,因为'itemgetter'在C中实现,而lambda函数只是在Python中。在实践中我不会为此担心。使用最清晰的一个,如果您的应用程序运行缓慢,并优化慢点。 –

+1

也许这很明显,但也许在答案中包含'import operator'。 –

0

你可以写一个为循环检查每个项目在列表中:

data = [ 
    {'key1': 1, 'key2': 'string'}, 
    {'key1': 3, 'key2': 'string'}, 
    {'key1': 5, 'key2': 'string with highest value'}, 
] 
highest = None 
result = None 
for item in data: 
    value_key1 = item['key1'] 
    if highest is None or value_key1 > highest: 
     highest = value_key1 
     result = item['key2'] 

print(result) 
0

你应该对列表进行排序,然后得到例如第一 :

f = [{'key1': 1, 'key2': 'string'}, 
    {'key1': 3, 'key2': 'string'}, 
    {'key1': 5, 'key2': 'string with highest value'}, 
] 
order_list = sorted(f,key=lambda x:x["key1"],reverse=True) 
first = order_list[0]