Перебирать все отдельные значения словаря в списке словарей

Предполагая список словарей, цель состоит в том, чтобы перебрать все различные значения во всех словарях.

Пример:

d1={'a':1, 'c':3, 'e':5}
d2={'b':2, 'e':5, 'f':6}
l=[d1,d2]

Итерация должна быть закончена 1,2,3,5,6, не имеет значения, если это набор или список.

6 ответов

Решение

Ты можешь использовать set с пониманием:

d1 = {'a':1, 'c':3, 'e':5}
d2 = {'b':2, 'e':5, 'f':6}
L = [d1, d2]

final = set(j for k in L for j in k.values())
# {1, 2, 3, 5, 6}

Ты можешь использовать set.union перебрать различные значения:

res = set().union(*(i.values() for i in (d1, d2)))

# {1, 2, 3, 5, 6}

С помощью set

Пример:

from itertools import chain
d1={'a':1, 'c':3, 'e':5}
d2={'b':2, 'e':5, 'f':6}
l=set(chain.from_iterable([d1.values(),d2.values()]))
print( l )

Выход:

set([1, 2, 3, 5, 6])
  • chain.from_iterable сгладить список
from functools import reduce
print(reduce(set.union, map(set, map(dict.values, l))))

Это выводит:

{1, 2, 3, 5, 6}
print list(set().union(a, b))

Довольно прямо

Простое решение с использованием itertools.chain и выражение генератора:

from itertools import chain

set(chain.from_iterable(d.values() for d in l))
Другие вопросы по тегам