2016-12-02 2 views
0

У меня есть словарь, который выглядит как:Создание списка краевого из словаря, который содержит другой словарь

{ 
    a: {a, b, c}, 
    b: {a, b, c}, 
    ... 
} 

По существу, словарь с ключами и значениями, а сами значениями в другом словаре.

Как бы я сделал ключи и значение в список края

Я хочу каждый край, чтобы быть похожим:

(a, a), (a, b), (a, c), (b, a), (b, b), (b, c) 

Для каждого ключа в словаре, края он подключен к является его значением в словаре.

Спасибо.

+0

a, b и c являются числами или типом данных? – lmiguelvargasf

+0

они строки –

+0

вы знаете, что в вашем главном '{a, b, c}' есть набор? – lmiguelvargasf

ответ

0
a, b, c = ('a', 'b', 'c') 
main = {a: {a, b, c}, b: {a, b, c}} 

output = [] 

# loop through the keys of the dictionary 
for key in main: 
    # iterate through set 
    for i in main[key]: 
     output.append((key, i)) 

print(output) 
>>> [('a', 'a'), ('a', 'c'), ('a', 'b'), ('b', 'a'), ('b', 'c'), ('b', 'b')] 
+0

Это сработало, я считаю, спасибо! –

+1

Вместо 'value', вы должны написать' key', так как это то, что вы на самом деле повторяете в 'main'. – pylang

+1

@pylang Tku, исправлено это –

0

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

a = 'a' 
b = 'b' 
c = 'c' 


x = { 
    a: {a, b, c}, 
    b: {a, b, c}, 
} 

for key in x: 
    for value in x[key]: 
     print("(" + key + ", " + value + ")", end=" ") 

Однако порядок, что вам требуется не может быть точно такой же, так как словари и наборы не сортируются структуры данных. Если порядок имеет значение, вы можете использовать следующий код:

a, b, c = 'a', 'b', 'c' 

x = { 
    a: {a, b, c}, 
    b: {a, b, c}, 
} 

y = [] 

for key in sorted(x): 
    for value in sorted(x[key]): 
     y.append((key, value)) 

print(y) 

Я действительно надеюсь, что это помогает.

0

Пока не ясно мне точные крайние случаи вы ищете, в качестве альтернативы @ double_j-х результате, вы можете выполнить itertools.product на ключи и значения.

import itertools as it 

list(it.product(main.keys(), set.union(*main.values()))) 
# [('a', 'a'), ('a', 'c'), ('a', 'b'), ('b', 'a'), ('b', 'c'), ('b', 'b')] 

Этот подход находит Cartesian product двух итерируемыми: 1) ключей и 2) набор уникальных значений в main словаре.

Смежные вопросы