Создание вложенного словаря с использованием двух списков с разным количеством ключей и значений - PullRequest
0 голосов
/ 04 августа 2020
Keys = ['a','b','c','d','e'] 
values = ['a','a1','a2','b','b4','b5','c','c4','c3','d','d4','d6','e','e4','e3']



output = {'a':{'a':['a1','a2'],'b':['b4','b5'],'c':['c4','c3'],'d':['d4','d6'],'e':['e4','e3']}}
          
  • У меня есть два списка, ключи и Значения .
  • «Ключи» содержит ключи словаря и "значения" содержит ключи, а также значения для словаря.
  • output {} - это словарь, который я стремлюсь получить в качестве вывода.

Я реализовал следующий код

list4 = []

for i in range(len(values)):
    for j in range(len(Keys[1:])):
        if Keys[j]==values[i]:
            for k in range(i,len(values)):                
                list4.append(values[k])
                if Keys[j+1] == values[k]:
                    del list4[-1]
                    break

                        
            output = dict(zip(Keys[j], list4))
            print(output)

Этот лог c не работает, есть ли для этого какая-то реализация?

Ответы [ 2 ]

6 голосов
/ 04 августа 2020

Вы можете использовать itertools.groupby для этого:

from itertools import groupby
Keys = ['a', 'b', 'c', 'd', 'e']
values = ['a', 'a1', 'a2', 'b', 'b4', 'b5', 'c', 'c4', 'c3',
          'c2', 'd', 'd4', 'd6', 'e', 'e4', 'e3']

di = {}
for k, g in groupby(values, key=lambda i: i[0]):
    di[k] = list(g)[1:]

# or with dict comprehension
# di = {k:list(g)[1:] for k, g in groupby(values, key=lambda i: i[0])}
print(di)
{'a': ['a1', 'a2'],
 'b': ['b4', 'b5'],
 'c': ['c4', 'c3', 'c2'],
 'd': ['d4', 'd6'],
 'e': ['e4', 'e3']}
4 голосов
/ 04 августа 2020

Вы можете сканировать values и создать новый список, когда найдете элемент из Keys:

d = {}
output = {Keys[0]: d}
lst = None
for val in values():
    if val in Keys:
        lst = []
        d[val] = lst
    elif lst is not None:
        lst.append(val)

Он дает, как и ожидалось:

{'a': {'a': ['a1', 'a2'],
       'b': ['b4', 'b5'],
       'c': ['c4', 'c3'],
       'd': ['d4', 'd6'],
       'e': ['e4', 'e3']}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...