繁体   English   中英

我可以从字典键数组创建字典值的 numpy 数组吗?

[英]Can I create a numpy array of dictionary values from an array of dictionary keys?

假设我有一本字典:

d = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

给定一个 numpy 键数组**,例如['a' 'c' 'e'] ,是否有一种简单的方法来创建相应值的 numpy 数组,例如[1 3 5]

** 出于我使用它的上下文的原因,我更喜欢输入/输出 numpy 数组。 类似的事情显然可以用列表来完成:

keys = ['a', 'c', 'e']
values = []

for k in keys:
    values.append(d[k])

print(values)
[1, 3, 5]

但我想知道是否有一种内置的方法可以在 numpy.js 中做这样的事情。

您可以使用结构化数组np.in1d来做到这np.in1d

import numpy as np

d = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

# Create structured array (modify formats, names as necessary):
names = ['key', 'data']  
formats = ['U10', 'i4']                                                                        
dtype = dict(names = names, formats = formats)

arr = np.array(list(d.items()), dtype=dtype)

# >>> arr
# array([('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)],
#       dtype=[('key', '<U10'), ('data', '<i4')])

# use np.in1d to get your keys:

keys = ['a', 'c', 'e']

values = arr[np.in1d(arr['key'], keys)]['data']                                                

# >>> values
# array([1, 3, 5], dtype=int32)

如果您只需要将 numpy 数组作为输入和输出,但不坚持使用 numpy函数来处理它们,则可以对列表理解的结果使用numpy.array()

import numpy as np

d = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
keys = np.array(['a', 'c', 'e'])
values = np.array([d[k] for k in keys])

print(values)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM