Используя вложенный список для создания словаря, где первый список - это столбец, а каждый список - строка? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть вложенный цикл, первый список которого содержит имена столбцов, а каждый последующий список представляет собой строку.Например, у меня есть вложенный список, который дает возраст человека и 1 или 0, указывающий, нравится ли ему цвет:

data = [['age', 'blue', 'green', 'red', 'orange'], 
         [12, 1, 0, 0, 1],
         [10, 0, 1, 0, 1],
         [9, 0, 0, 0, 0],
         [8, 1, 0, 0, 0],
         [13, 1, 1, 1, 0]

Я хочу вывод, который выглядит следующим образом:

 new_data ={(12, 'blue'): 1,
            (12, 'green'): 0,
            (12, 'red'): 0,
            (12, 'orange'): 1,
            (9, 'blue'): 0,
            (9, 'green'): 1,
            (9, 'red'): 0,
            (9, 'orange'): 1 .....}

и т. Д., Но со всеми данными.

Я дошел до:

ages = data[0][1:len(data[0])]

i = 1
for x in ages:
    print({t[0] + x: t[i] for t in data[1:len(data)]})
    i = i + 1

, и когда я пытаюсь объединить t [0] и x в качестве кортежа, это заканчивается только тем, что дает мне:

{'12blue': 1, '10blue': 0, '9blue': 0, '8blue': 1, '13blue': 1}
{'12green': 0, '10green': 1, '9green': 0, '8green': 0, '13green': 1} 

и т. Д.

1 Ответ

1 голос
/ 26 сентября 2019

Вы можете сделать следующее:

import pprint

data = [['age', 'blue', 'green', 'red', 'orange'],
        [12, 1, 0, 0, 1],
        [10, 0, 1, 0, 1],
        [9, 0, 0, 0, 0],
        [8, 1, 0, 0, 0],
        [13, 1, 1, 1, 0]]

colors, *rows = data # split in colors and rows

d = {}
for row in rows: 
    idi, *marks = row # split in id and marks
    for color, mark in zip(colors[1:], marks): # iterate in parallel over marks and colors
            d[(idi, color)] = mark


pprint.pprint(d)

Вывод

{(8, 'blue'): 1,
 (8, 'green'): 0,
 (8, 'orange'): 0,
 (8, 'red'): 0,
 (9, 'blue'): 0,
 (9, 'green'): 0,
 (9, 'orange'): 0,
 (9, 'red'): 0,
 (10, 'blue'): 0,
 (10, 'green'): 1,
 (10, 'orange'): 1,
 (10, 'red'): 0,
 (12, 'blue'): 1,
 (12, 'green'): 0,
 (12, 'orange'): 1,
 (12, 'red'): 0,
 (13, 'blue'): 1,
 (13, 'green'): 1,
 (13, 'orange'): 0,
 (13, 'red'): 1}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...