Python将LIST转换为带有数组的字典(列表)

问题描述 投票:-1回答:2

我是新来的,很抱歉,如果这个问题已被提出,但我找不到。我有1个列表和1个arrray看起来像这样。

['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]} 

类似的东西。

谢谢

python arrays python-3.x python-2.7 list
2个回答
0
投票

你可以使用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']}

0
投票

这是一个例子:

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'在值中,则索引1将附加到x2。然后,我们为字典创建添加值,其中x1或x2是键,并且与x1或x2对应的列表是值。输出就是你想要的。

另外值得注意的是,你使用的是numpy吗?或者您是Java开发人员?在Python中,您正在寻找的输出技术上是一个“嵌套列表”,其中字典是主要的数据结构。不是数组。在java中,这将是地图中的数组。我只是好奇,因为你听起来像一个Java开发人员,我觉得很有趣,因为你主要写的语言可以影响我的猜测。

© www.soinside.com 2019 - 2024. All rights reserved.