Python Преобразование LIST в словарь с массивом (список) - PullRequest
0 голосов
/ 09 сентября 2018

Я новичок, извините, если этот вопрос уже задавался, но я не смог его найти. У меня есть 1 список и 1 массив, которые выглядят примерно так.

['x1 y1','x1 y2','x1 y3','x1 y4','x2 b1','x2 b2','x2 b3','x2 b4']

Мне нужно преобразовать этот список в словарь с таким вложенным списком, как этот

{x1:[y1,y2,y3,y4], x2:[b1,b2,b3,b4]} 

что-то похожее на это.

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Вот пример:

list_1 = ['x1 y1','x1 y2','x1 y3','x1 y4','x2 b1','x2  b2','x2 b3','x2 b4']
x1 = []
x2 = []
dict_1 = {}

for i in list_1:
    if 'x1' in i:
         j = i.split()
         x1.append(j[1])

    if 'x2' in i:
         j = i.split()
         x2.append(j[1])

dict_1 = {'x1':  x1, 'x2': x2}

print(dict_1)

Выход:

{'x1': ['y1', 'y2', 'y3', 'y4'], 'x2': ['b1', 'b2', 'b3', 'b4']}

Мы создаем пустые списки для всего, что принадлежит x1 и x2. Мы также создаем и очищаем dict, к которому мы добавим значения позже. Затем мы запускаем цикл for, в котором говорится, что если в значении есть x1, мы разделим это значение, и индекс один добавится к x1. Если 'x2' находится в значении, тогда индекс один будет добавлен к x2. Затем мы создаем дополнительные значения в словаре с ключами x1 или x2, а список соответствует значениям x1 или x2. Выход - это то, что вы ищете.

Также заметьте, вы используете numpy? Или вы разработчик Java? В Python то, что вы ищете в качестве выходных данных, технически представляет собой «вложенный список» со словарем, являющимся основной структурой данных. Не массив. В Java это будет массив в карте. Мне было просто любопытно, потому что вы звучите как Java-разработчик, который мне кажется интересным, потому что язык, на котором вы пишете, может повлиять на словоблудие.

0 голосов
/ 09 сентября 2018

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

import itertools
d = ['x1 y1','x1 y2','x1 y3','x1 y4','x2 b1','x2 b2','x2 b3','x2 b4']
new_d = [[a, list(b)] for a, b in itertools.groupby(sorted(map(str.split, d), key=lambda x:x[0]), key=lambda x:x[0])]
final_result = {a:[d for _, d in b] for a, b in new_d}

Выход:

{'x1': ['y1', 'y2', 'y3', 'y4'], 'x2': ['b1', 'b2', 'b3', 'b4']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...