У меня есть список, который содержит строку словаря, как это:

queue = [{1: 0.39085439023582913, 2: 0.7138416909634645, 3: 0.9871959077954673}]

Я пытаюсь заставить его вернуть наименьшее значение вместе с его ключом, так что в этом случае он будет возвращать

1,0.39085439023582913

Я пытался использовать

min(queue, key=lambda x:x[1]) 

Но это просто возвращает всю строку следующим образом: есть предложения? Спасибо!

{1: 0.39085439023582913, 2: 0.7138416909634645, 3: 0.9871959077954673}
3
helloworld 22 Фев 2018 в 19:39

3 ответа

Лучший ответ

Если вы хотите, чтобы мин для каждого dict в списке, вы можете использовать следующее понимание списка:

[min(d.items(), key=lambda x: x[1]) for d in queue]

Который для вашего примера возвращает:

[(1, 0.39085439023582913)]

d.items() возвращает список кортежей в форме (key, value) для словаря d. Затем мы сортируем эти кортежи, используя значение (в данном случае x[1]).

Если у вас всегда есть данные в форме списка с одним словарем, вы также можете вызвать .items() для первого элемента queue и найти min:

print(min(queue[0].items(), key=lambda x:x[1]))
#(1, 0.39085439023582913)
2
pault 22 Фев 2018 в 16:58

Да, min(queue) найдет минимум в list, а не во вложенном dictionary Сделай это:

key_of_min_val = min(queue[0], key=queue[0].get)
print((key_of_min_val , queue[0][key_of_min_val]))
0
Sagar B Hathwar 22 Фев 2018 в 16:43

Вы можете сделать это через

mykey = min(queue[0], key=queue[0].get)

Затем просто используйте этот ключ и получите значение словаря

mykey, queue[0][mykey]
0
J. Doe 22 Фев 2018 в 16:58