2016-11-24 2 views
-5

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

{A: {B, C}, B: {A, C}, C: {A, B, D}, D: {C}} 

возвращает что-то похожее на это

{(A, B), (A, C), (B, C), (C, D)} 
+2

Этот вывод является * набором * кортежей, но да, вы могли бы это сделать. Вы что-то пробовали? Что случилось? – jonrsharpe

+0

Я пробовал использовать defaultdict, но я не думаю, что это был правильный путь в этой ситуации. – jdawg

+0

Ну нет, если вы пытаетесь закончить с помощью * не * словаря. – jonrsharpe

ответ

2

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

{(k, v) for k, values in d.items() for v in values} 

Демо:

>>> d = {'A': {'B', 'C'}, 'B': {'A', 'C'}, 'C': {'A', 'B', 'D'}, 'D': {'C'}} 
>>> {(k, v) for k, values in d.items() for v in values} 
{('B', 'A'), ('D', 'C'), ('A', 'B'), ('B', 'C'), ('C', 'B'), ('C', 'D'), ('A', 'C'), ('C', 'A')} 
>>> from pprint import pprint 
>>> pprint(_) 
{('A', 'B'), 
('A', 'C'), 
('B', 'A'), 
('B', 'C'), 
('C', 'A'), 
('C', 'B'), 
('C', 'D'), 
('D', 'C')} 
Смежные вопросы