【问题标题】:NumPy: Can I create an array of just the values from an array of dicts?NumPy:我可以创建一个仅包含 dicts 数组中的值的数组吗?
【发布时间】:2021-11-15 02:02:15
【问题描述】:

所以我有一个二维数组,其中每个元素都是一个字典,如下所示:

[[{"key":"value"},{"key":"othervalue"}],
[{"key":"notvalue"},{"key":"value"}]]

我正在尝试使用它来创建第二个数组,其中每个元素都基于第一个数组的字典的值,所以它看起来像这样:

[[True, True]
[False, True]]

甚至这个:

[["value","othervalue"]
["notvalue","value"]]

但我终其一生都无法弄清楚如何获取字典中的值。现在我正在这样做:

results=numpy.where((old_array=={"key":"value"}) | (old_array=={"key":"othervalue"}))
for i in zip(results[0], results[1]):
    new_array[i[0],i[1]]=True

...但我觉得必须有比这更好的方法。是否有一些不错的、简洁的功能可用于我完全丢失的字典数组?还是这只是我必须笨拙地通过的一个?

提前致谢!

【问题讨论】:

  • 嗯,你知道如何直接获取单个dict的值吗?你知道如何将函数应用于数组的每个元素(使用 Numpy 而不是显式循环)吗?你能想办法把这两件事放在一起吗?
  • @KarlKnechtel 如果所有这些问题的答案都是肯定的,那么我就不会在这里了,对吗?我对 python 还是很陌生,特别是对于 NumPy。我在弄清楚如何使用整个数组时遇到了很多麻烦。 arr[i][j]["key"] 有时似乎有效,但当我尝试遍历数组时无效。
  • 嗯,哪个问题的答案是否定的?你有没有尝试学习如何做你不能做的事情?如果是这样,怎么做?例如,您是否尝试将任何内容放入搜索引擎? “arr[i][j]["key"] 似乎有时有效,但在我尝试遍历数组时无效”我们只能告诉您尝试您向我们展示的代码有什么问题。

标签: python arrays numpy


【解决方案1】:
In [263]: arr =np.array([[{"key":"value"},{"key":"othervalue"}],
     ...: [{"key":"notvalue"},{"key":"value"}]])
In [264]: arr
Out[264]: 
array([[{'key': 'value'}, {'key': 'othervalue'}],
       [{'key': 'notvalue'}, {'key': 'value'}]], dtype=object)

简单的列表理解方法:

In [266]: [d['key'] for d in arr.ravel().tolist()]
Out[266]: ['value', 'othervalue', 'notvalue', 'value']

一个不错的选择,虽然不是更快:

In [267]: np.frompyfunc(lambda d:d['key'],1,1)(arr)
Out[267]: 
array([['value', 'othervalue'],
       ['notvalue', 'value']], dtype=object)

Object dtype 数组实际上是列表,存储引用,而不是特殊的 numpy 对象。而dict 只能通过key 索引(或items/values)访问。 numpy 没有添加任何特殊的dict 处理代码。

【讨论】:

  • 谢谢!我仍在努力弄清楚 ravel() 和 frompyfunc() 实际上 做了什么,但我认为我可以让它发挥作用。
猜你喜欢
  • 2021-07-23
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 2010-11-25
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多