Преобразовать словарь с кортежами в качестве ключей к кортежам, которые содержат ключи и значения - PullRequest
0 голосов
/ 24 октября 2018

У меня есть словарь, подобный этому:

d = {('a','b','c'):4, ('e','f','g'):6}

, и я хотел бы иметь такой набор кортежей:

{('a', 'b', 'c', 4), ('e', 'f', 'g', 6)}

Я пробовал таким образом:

b = set(zip(d.keys(), d.values()))

Но вывод таков:

set([(('a', 'b', 'c'), 4), (('e', 'f', 'g'), 6)])

Как я могу решить это?Спасибо!

Ответы [ 4 ]

0 голосов
/ 24 октября 2018

Или попробуйте map:

print(set(map(lambda k: k[0]+(k[1],),d.items())))

Или (Python 3.5 up):

print(set(map(lambda k: (*k[0],k[1]),d.items())))
0 голосов
/ 24 октября 2018

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

>>> {(*k, v) for k, v in d.items()}
{('e', 'f', 'g', 6), ('a', 'b', 'c', 4)}
0 голосов
/ 24 октября 2018

В Python> = 3.5 вы можете использовать обобщенную распаковку в этом наборе пониманий :

{(*k, v) for k, v in d.items()}
# {('a', 'b', 'c', 4), ('e', 'f', 'g', 6)}

Но более универсально применимый tuple подход к конкатенациикак предложено Аран-Феем не является значительно более многословным:

{k + (v,) for k, v in d.items()}
0 голосов
/ 24 октября 2018

Вы не хотите архивировать ключи со значениями, вы хотите объединить их:

>>> {k + (v,) for k, v in d.items()}
{('a', 'b', 'c', 4), ('e', 'f', 'g', 6)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...