заполнение многоуровневого вложенного словаря из цикла - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь заполнить вложенный словарь из CSV-файла, он работает, но способ, которым я это делаю, выглядит грязным для меня. Если кто-то знает лучший способ сделать это, пожалуйста, дайте мне знать.

вот мой код без части файла csv:

import pprint

my_keys = ['keys1','keys2']
data = ['lvl1_a;lbl2_a;lvl3_a;xxx;xxx', 'lvl1_a;lbl2_a;lvl3_b;xxxx;xxx', 'lvl1_a;lbl2_b;lbl2_a;xxx;xxxx'] 

_dict = {}

def get_dictionary(dico, keys, r):
    d = dico
    for k in keys:
        x = d.get(k)
        if x is not None:
            d = d[k]                        
        else:
            return d,x
        if k == r:
            return d,x

for d in data:
    r_keys = d.split(";")[:-2]
    r_values = d.split(";")[-2:]

    for k in r_keys:
        d,x = get_dictionary(_dict, r_keys, k)
        if x is None:
            d.update({k:{}})

    d = d[r_keys[-1]]

    for j,y in enumerate(my_keys):
        d[y] = r_values[j]

pprint.pprint(_dict)  

результат:

{'lvl1_a': {'lbl2_a': {'lvl3_a': {'keys1': 'xxx', 'keys2': 'xxx'},
                       'lvl3_b': {'keys1': 'xxxx', 'keys2': 'xxx'}},
            'lbl2_b': {'lbl2_a': {'keys1': 'xxx', 'keys2': 'xxxx'}}}}

Спасибо тебе!

...