Как я могу разобрать dict по умолчанию со значениями, которые являются списками в независимые dict - PullRequest
0 голосов
/ 29 марта 2019

Попытка разобрать defaultdict (список)

Ввод:

defaultdict(class <'list'>,{'key1': ['v1', 'v2'], 'key2': [v3, v4], 'key3': ['v5', 'v6']})

желаемый вывод:

list_dic = [{key1: v1, key2: v3, key3: v5}, {key1: v2, key2: v4, key3: v6}] 

Должен работать для n значений в списках.

Исходя из желаемого вывода, я намерен использовать mysql executemany для вставки этих значений в БД.Если у кого-нибудь есть какие-нибудь лучшие предложения о том, как я могу вставить deafaultdict (список) в таблицу в mysql - я был бы признателен.

1 Ответ

0 голосов
/ 29 марта 2019

Для меня ответ заключается в понимании слов, вложенных в понимание списков.Обратите внимание, что этот фрагмент кода полагается на то, что входные данные - это словарь со всем списком одинаковой длины!

Чтобы проверить это, выполните:

n = len(list(input.values())[0]
all_length_equal = all([len(v)==n for v in input.values()])

Как только это произойдетГотово, приведенный ниже код просматривает каждое значение, подбирает значение i и сохраняет его в словарь, попробуйте его с 0:

{k:v[0] for k,v in input.items()}

Затем вам нужно добавить понимание списка

[ i for for i in range(len(list(input.values())[0])]

Выше вернется диапазон чисел.Но если вы скомбинируете их, он вернет словари с i в диапазоне длины первого значения.

list_dic = [{
     k:v[i] for k,v in input.items() #This create the correct dictionnary with all the i-values in the input
} for i in range(len(list(input.values())[0])] # iterate through the length of the first list
...