Обновите ключ словаря с максимальным значением

#python #dictionary

Вопрос:

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

 L1 = ['a','b','b','d'] L2 = [1,3,2,4] d = {k:v for k,v in zip(L1,L2)} {'a': 1, 'b': 2, 'd': 4}  

В приведенном выше коде значение ключа «b» равно 2, я хочу, чтобы оно оставалось только 3, так как это максимальное значение.

Ответ №1:

Может быть, вы тоже могли бы добавить сортировку, таким образом, наивысшее значение будет последним и сохранится

 d = dict(sorted(zip(L1,L2))  

Ответ №2:

 L1 = ['a','b','b','d'] L2 = [1,3,2,4] d = {} for k,v in zip(L1,L2):  if k not in d or d[k] lt; v:  d[k] = v print(d)  

Ответ №3:

Вы можете использовать itertools.groupby для этого: примечание: я использую operator.itemgetter для получения ключей/значений вместо лямбды или вложенного цикла for

 from operator import itemgetter from itertools import groupby  L1 = ['a','b','b','d'] L2 = [1,3,2,4] get_k, get_v = itemgetter(0), itemgetter(1) result = {k: max(map(get_v, g)) for k, g in groupby(zip(L1, L2), get_k)}  

Ответ №4:

 gt;gt;gt; L1 = ['a','b','b','d'] gt;gt;gt; L2 = [1,3,2,4] gt;gt;gt; from collections import defaultdict  gt;gt;gt; x =defaultdict(int) gt;gt;gt; for a, b in zip(L1, L2): ... if a in x: ... x[a]=max(x[a], b) ... else: ... x[a]=b ...  gt;gt;gt; x defaultdict(lt;class 'int'gt;, {'a': 1, 'b': 3, 'd': 4}) gt;gt;gt;