У меня есть список с главными ключами и список списков списков, где первое значение каждого закрытого списка (например, 'key_01'
) должно быть вспомогательным ключом для соответствующих значений (например, 'val_01', 'val_02'
). Данные представлены здесь:Вложенные списки вложенных dicts
master_keys = ["Master_01", "Master_02", "Master_03"]
data_long = [[['key_01','val_01','val_02'],['key_02','val_03','val_04'], ['key_03','val_05','val_06']],
[['key_04','val_07','val_08'], ['key_05','val_09','val_10'], ['key_06','val_11','val_12']],
[['key_07','val_13','val_14'], ['key_08','val_15','val_16'], ['key_09','val_17','val_18']]]
Я хотел бы, чтобы эти списки будут объединены в словарь словарей, например:
master_dic = {
"Master_01": {'key_01':['val_01','val_02'],'key_02': ['val_03','val_04'], 'key_03': ['val_05','val_06']},
"Master_02": {'key_04': ['val_07','val_08'], 'key_05': ['val_09','val_10'], 'key_06': ['val_11','val_12']},
"Master_03": {'key_07': ['val_13','val_14'], ['key_08': ['val_15','val_16'], 'key_09': ['val_17','val_18']}
}
То, что я получил до сих пор является суб ДИКТ:
import itertools
master_dic = {}
servant_dic = {}
keys = []
values = []
for line in data_long:
for item in line:
keys.extend(item[:1])
values.append(item[1:])
servant_dic = dict(itertools.izip(keys, values))
Который выдает словарь, как и ожидалось.
servant_dic = {
'key_06': ['val_11','val_12'], 'key_04': ['val_08','val_07'], 'key_05': ['val_09','val_10'],
'key_02': ['val_03','val_04'], 'key_03': ['val_05','val_06'], 'key_01': ['val_01','val_02']
}
Проблема заключается в том, что если я хочу, чтобы добавить master_keys в этот словарь, так что я получаю желаемый результат, я должен был бы сделать это в определенном порядке, который был бы возможно, если каждая строка имел счетчик, как это:
enumerated_dic =
{
0: {'key_01':['val_01','val_02'],'key_02': ['val_03','val_04'], 'key_03': ['val_05','val_06']},
1: {'key_04': ['val_07','val_08'], 'key_05': ['val_09','val_10'], 'key_06': ['val_11','val_12']},
2: {'key_07': ['val_13','val_14'], ['key_08': ['val_15','val_16'], 'key_09': ['val_17','val_18']}
}
Я хотел бы сделать это с enumerate()
, в то время как каждая линия servant_dic
построена, но не могу понять, каким образом. С тех пор я мог просто заменить счетчики 0, 1, 2 и т. Д. С помощью master_keys
.
Благодарим за помощь.
Довольно короткая, Nice работа +1. –
Спасибо @RahulKP – turkus
После прочтения '' zip() '(снова), это меня осенило. @turkus и @ ig-melnyk, ваш подход действительно научил меня тому, что я хотел узнать здесь, спасибо! @mpiskore, подход, использующий '.pop()', для меня, является очень творческим. Мне нравится это. – MrPadlog