[英]get values from a dictionary using a list of indexes
给出一个清单:
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']
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
你可以使用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)
你可以使用dict理解:
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]}
使用熊猫:
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]
import pandas as pd
data = pd.DataFrame(x)
inds = data[data[0]!=0.0].index
print(inds)
输出:Int64Index([1,5,6,9],dtype ='int64')
更容易:
df['vals']=list(filter(None,x))
df['idx']=df['vals'].apply(x.index)
使用filter(None,x)
过滤非0值,( None
基本上没有语句(或不是False
)
然后使用pandas申请获取索引基本上通过'vals'
列然后获取列表中的值索引x
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.