从字典中切片数据

时间:2013-03-26 20:52:54

标签: python dictionary numpy slice

我的代码将正确返回xyz坐标列表(或xyz坐标列表)。我的问题是我想直接从它返回的列表中访问各个数字,但我一次只能访问一个完整的列表。我的代码:

import numpy as np
a = [([2, -2, 0.29]), ([-2, 0, 1.9]), ([2, 1, 2.35]), ([2, -3, 2.96])]
b = [0,2,3]
myZip= list(zip(a,b))
result={}
for x in myZip:
    result.setdefault(x[1],[]).append(x[0])
xyz=[]
for each_index in b:
     xyz.append(result[each_index])
     print(xyz)
     xyz.clear() 

将返回:

[[[2, -2, 0.29]]]
[[[-2, 0, 1.9]]]
[[[2, 1, 2.35]]]

我现在想把它分成X和Y,这样X = [2,-2,2]和Y = [ - 2,0,1]。我试过直接切片,但是我得到的错误是切片是整数而不是元组。我还尝试使用np.hsplit转换为numpy。怎么能实现这一目标?谢谢你们(或女孩们)。

修改

我意识到在这些情况下它一次只打印一个,但在我的真实世界的例子中,有时会返回([x,y,x],[x,y,z])。

2 个答案:

答案 0 :(得分:1)

使用列表理解:

>>> X = [result[i][0][0] for i in b]
>>> Y = [result[i][0][1] for i in b]
>>> print X, Y
[2, -2, 2] [-2, 0, 1]

答案 1 :(得分:1)

使用zip(*a)

>>> a = [[2, -2, 0.29], [-2, 0, 1.9], [2, 1, 2.35], [2, -3, 2.96]]

>>> b = [0,2,3]

>>> x, y, z = zip(*(a[i] for i in b))

>>> x
(2, 2, 2)

>>> y
(-2, 1, -3)

>>> z
(0.29, 2.35, 2.96)

顺便说一下,列表中的圆括号是多余的,所以我删除了它们。