Как сделать из 2 списков словарь?
У меня есть 2 словаря со значениями:
1)
a = {'fields' : [1 ,2 ,3 ,4]}
b = {'items' : [a, s, d, f], [s, a, d, f], [d, s ,f, a] и тд}
Списки из 2 словаря всегда по количеству значений соответствуют списку из 1 словаря.
По сути значения из списка 1 словаря я в дальнейшем планирую использовать, как ключи, а каждый список из 2 словаря мне нужно соотнести к словарю из 1 списка, чтобы получилось так:
{'1': a, '2': s, '3': 4, '4': f},
{'1': s, '2': a, '3': d, '4': f},
{'1': d, '2': s, '3': f, '4': a}
Крайняя попытка потерпела неудачу на следующем решении:
a_and_b = dict(zip(a, b))
print (a_and_b)
Получается так:
{
'1': [a, s, d, f],
'2': [s, a, d, f],
'3': [d, s ,f, a],
# и так далее
}
Помогите пожалуйста, буду крайне благодарен
Ответы (4 шт):
Вот пример как это сделать:
keys = ['a', 'b', 'c']
values = [1, 2, 3]
dictionary = dict(zip(keys, values))
print(dictionary) # {'a': 1, 'b': 2, 'c': 3}
Если я правильно понял что требуется, то у тебя правильный способ собрать словарь, но их должно быть несколько -- по b нужно итерироваться
In [1]: a = [1 ,2 ,3 ,4]
In [2]: b = [['a', 's', 'd', 'f'], ['s', 'a', 'd', 'f'], ['d', 's' ,'f', 'a']]
In [3]: [dict(zip(a, x)) for x in b]
Out[3]:
[{1: 'a', 2: 's', 3: 'd', 4: 'f'},
{1: 's', 2: 'a', 3: 'd', 4: 'f'},
{1: 'd', 2: 's', 3: 'f', 4: 'a'}]
Да вроде не сложно, если я правильно понял задачу.
a = {'fields' : [1 ,2 ,3 ,4]}
b = {'items' : [['a', 's', 'd', 'f'],
['s', 'a', 'd', 'f'],
['d', 's' ,'f', 'a']]}
a_and_b = [dict(zip(a['fields'], x)) for x in b['items']]
print(a_and_b)
[{1: 'a', 2: 's', 3: 'd', 4: 'f'},
{1: 's', 2: 'a', 3: 'd', 4: 'f'},
{1: 'd', 2: 's', 3: 'f', 4: 'a'}]
Можно универсально без указания ключей вытащить все значения через dict.values().
После чего собрать их в трех циклах: первый берет все значения по всем ключам из for bv in b.values(), второй все значения for av in a.values(), которые комбинируем в словарь через zip() со строками for row in bv, полученными в первом цикле.
a = {'fields' : [1, 2, 3, 4]}
b = {'items' : [['a', 's', 'd', 'f'], ['s', 'a', 'd', 'f'], ['d', 's' ,'f', 'a']]}
comb = [[dict(zip(av, row)) for av in a.values() for row in bv] for bv in b.values()]
print(*comb[0], sep='\n')
Вывод:
{1: 'a', 2: 's', 3: 'd', 4: 'f'}
{1: 's', 2: 'a', 3: 'd', 4: 'f'}
{1: 'd', 2: 's', 3: 'f', 4: 'a'}