объединение списка списков из значений словаря в список кортежей в одном выражении python 3.7

У меня есть словарь следующим образом:

  myDict = {'a' : [[1,2], [3,4]], 'b':[[5,6],[7,8]]}

Из приведенного выше словаря я хочу составить единый список кортежей следующим образом:

  [(1,2),(3,4),(5,6),(7,8)]

Я могу добиться этого с помощью следующего фрагмента кода:

  l=[]
  for _, v in myDict.items():
     for i in v:
       l.append(tuple(i))

Могу ли я сделать то же самое, используя одно выражение?

Всего 2 ответа


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

list(map(tuple, (e for l in myDict.values() for e in l)))

Вы можете сгладить myDict.values() используя more_itertools.flatten :

from more_itertools import flatten

list(map(tuple, flatten(myDict.values())))

Кроме того, вы можете использовать понимание списка:

[tuple(e) for e in flatten(myDict.values())]

выход:

[(1, 2), (3, 4), (5, 6), (7, 8)]

Вы можете попробовать itertools.chain.from_iterable

list(map(tuple,itertools.chain.from_iterable(myDict.values())))
# [(1, 2), (3, 4), (5, 6), (7, 8)]