Создать словарь из списка точек и нескольких списков атрибутов - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу создать словарь этого формата:

mydic = {
    0: {'a': (20,10), 'b': 1, 'c': 0}, 
    1: {'a': (0,10), 'b': 1, 'c': 0}, 
    2: {'a': (4,5), 'b': 0, 'c': 0}, 
    3: {'a': (6,2), 'b': 0, 'c': 0}, 
    4: {'a': (1,4), 'b': 0, 'c': 1} 
}

Имеется четыре списка:

node = [0,1,2,3,4]
a = [(20,10),(0,10),(4,5),(6,2),(1,4)]
b = [1,0,0,0,0]
c = [0,1,0,0,1]

Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Предполагая, что все ваши списки имеют одинаковый размер, вы можете просто пройтись по каждому индексу и создать пару ключ / значение для каждой записи в dict:

node = [0,1,2,3,4]
a = [(20,10),(0,10),(4,5),(6,2),(1,4)]
b = [1,0,0,0,0]
c = [0,1,0,0,1]

assert(len(node) == len(a) == len(b) == len(c))  #Length should be equal

mydict = dict() # init empty dict

# Loops from 0 to len(node)
for i in range(len(node)):
    entry = {'a': a[i], 'b': b[i], 'c': c[i]}  # Creates dict object matching format
    mydict[node[i]] = entry  # Sets dict as value for each node item

print(mydict)

Это выводит:

{
  0: {'a': (20, 10), 'b': 1, 'c': 0}, 
  1: {'a': (0, 10), 'b': 0, 'c': 1}, 
  2: {'a': (4, 5), 'b': 0, 'c': 0}, 
  3: {'a': (6, 2), 'b': 0, 'c': 0}, 
  4: {'a': (1, 4), 'b': 0, 'c': 1}
}
0 голосов
/ 02 ноября 2018

Если все повторяемые фрагменты одинаковой длины, вы можете использовать zip() с пониманием речи :

items = node, a, b, c
result = {n: {'a': a_, 'b': b_, 'c': c_} for n, a_, b_, c_ in zip(*items)}
# {0: {'a': (20, 10), 'b': 1, 'c': 0}, 1: {'a': (0, 10), 'b': 0, 'c': 1}, 2: {'a': (4, 5), 'b': 0, 'c': 0}, 3: {'a': (6, 2), 'b': 0, 'c': 0}, 4: {'a': (1, 4), 'b': 0, 'c': 1}}

Что также можно записать так:

items = node, a, b, c
keys = 'a', 'b', 'c'
result = {x[0]: dict(zip(keys, x[1:])) for x in zip(*items)}

Возможно, вы также можете использовать map() здесь:

items = node, a, b, c
keys = 'a', 'b', 'c'
result = dict(map(lambda x: (x[0], dict(zip(keys, x[1:]))), zip(*items)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...