#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;