2014-09-15 3 views
-2

Как извлечь максимальное значение для каждого ключа в словаре списков?Как найти максимальное значение для каждой клавиши в словаре списков?

Например

#Generate some sample data 
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] 
d = defaultdict(list) 
for k, v in s: 
    d[k].append(v) 

>>> d.items() 
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])] 

Я хотел бы возвращать следующие результаты:

blue 4 
red 1 
yellow 3 

Я безуспешно пытался зацикливание над словарем и извлечения значений списка. Однако я не могу найти способ извлечь значения и связать их с соответствующими ключами.

+0

@jonrsharpe Пожалуйста, обратите внимание, что я обратился ваши комментарии по почте. – Borealis

+0

В некоторой степени неопределенно - [минимальный пример] (http://stackoverflow.com/help/mcve) и краткое описание проблемы (трассировка ошибки или ввод, ожидаемый и фактический вывод). – jonrsharpe

ответ

1

Если вы хотите получить результаты в словаре, вы также можете использовать однострочное выражение генератора.

items = {'blue': [2, 4], 'yellow': [1, 3], 'red': [1]} 
maxitems = {k : max(items[k]) for k in items} 
2

Если вам не нужно держать вокруг списка всех возможных значений, и просто нужно максимум, это будет сделать это:

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] 
d = dict(sorted(s)) 

d теперь:

{'blue': 4, 'yellow': 3, 'red': 1} 

sorted(s) сортирует кортежи в порядке возрастания, а конструктор dict будет отображать окончательный (самый высокий) результат.

Бонус: Если вы хотите, минимальные значения, dict(sorted(s, reverse=True)) даст, что к вам:

{'blue': 2, 'red': 1, 'yellow': 1} 
+0

Я считаю, что это решение можно разделить на категории «классные хаки». Однако я не вижу, как это делает код более читаемым или эффективным. – 5gon12eder

+1

@ 5gon12eder У меня тоже смешанные чувства. «Сортировка списка кортежей» идиома похожа на преобразование Шварца и множество других трюков сортировки: мощный, полезный ... и все же, все еще немного трюк. –

 Смежные вопросы

  • Нет связанных вопросов^_^