使用索引列表从字典中获取值

时间:2018-08-23 04:53:19

标签: python python-3.x data-manipulation

提供列表:

x = [0.0, 0.87, 0.0, 0.0, 0.0, 0.32, 0.46, 0.0, 0.0, 0.10, 0.0, 0.0]

我想获取所有非0值的索引并将其存储在d['inds']中 然后使用d['inds']中的索引遍历x的列表并获取值。 所以我会得到类似的东西:

d['inds'] = [1, 5, 6, 9]
d['vals'] = [0.87, 0.32, 0.46, 0.10]

我已经使用以下方法获取了索引:

d['inds'] = [i for i,m in enumerate(x) if m != 0]

但是我不确定如何获得d['vals']

5 个答案:

答案 0 :(得分:3)

d['vals'] = [x[i] for i in d['inds']]

更好的是,一次执行两项操作:

vals = []
inds = []
for i,v in enumerate(x):
    if v!=0:
        vals.append(v)
        inds.append(i)
d['vals']=vals
d['inds']=inds

import numpy as np
d['inds'],d['vals'] = np.array([(i,v) for i,v in enumerate(x) if v!=0]).T

答案 1 :(得分:3)

您可以使用numpy,其索引功能专为此类任务而设计:

import numpy as np

x = np.array([0.0, 0.87, 0.0, 0.0, 0.0, 0.32, 0.46, 0.0, 0.0, 0.10, 0.0, 0.0])

x[x!=0]
Out: array([ 0.87,  0.32,  0.46,  0.1 ])

,如果您仍然对索引感兴趣:

np.argwhere(x!=0)
Out: 
array([[1],
       [5],
       [6],
       [9]], dtype=int64)

答案 2 :(得分:3)

您可以使用字典理解:

m = {i:j for i,j in enumerate(x) if j!=0}

list(m.keys())
Out[183]: [1, 5, 6, 9]

list(m.values())
Out[184]: [0.87, 0.32, 0.46, 0.1]

如果要将其保存在字典d中,则可以执行以下操作:

d = {}
d['vals']=list(m.values())

d['ind']=list(m.keys())
d
  {'vals': [0.87, 0.32, 0.46, 0.1], 'ind': [1, 5, 6, 9]}

答案 3 :(得分:1)

使用熊猫:

info.plist

输出:Int64Index([1,5,6,9],dtype ='int64')

答案 4 :(得分:1)

容易得多:

df['vals']=list(filter(None,x))
df['idx']=df['vals'].apply(x.index)

驱逐:

  1. 使用filter(None,x)过滤非0值,(None基本上不需要语句(或者不需要False

  2. 然后使用大熊猫申请使索引基本上通过'vals'列,然后在列表x中获取值索引