我想从一个由一系列键组成的现有字典中提取一个子字典,这些键的值都是shape(N,3)或(N)的numpy数组,该子字典应该包含相同的键,这些键的值将是shape(m,3)或(m)的数组,m〈N,其中m个值是通过对键:值对中的一个应用某种标准获得的。
下面是一个非常简单的Python代码来举例说明我的问题。
import sys
import numpy as np
t1 = np.arange(0,30,0.5)
t1n = t1.reshape(20,3)
t2 = np.random.rand(20,1)
dtest = dict(p1=t1n, p2=t2)
ind_ok = np.where(dtest['p2'][dtest['p2'] > 0.7])
sub_dtest = dict(p1=dtest['p1'][ind_ok,:], p2=dtest['p2'][ind_ok,:])
这是一个只有两个对的简单字典,我从第二个对中提取行,验证一些条件,例如值大于0.7。然后我通过直接索引每个键:值对来构造所需的子字典(sub_dtest)。当我的字典中有很多对时,我必须为每个对重复赋值:Python中有没有更优雅方法来完成这项任务?
上面的代码是我所做工作的简化版本。
1条答案
按热度按时间5f0d552i1#
基于您所关心的固定关键点集使用a dictionary comprehension(简称dictcomp):
或者使用原始
dict
:第一个选项需要列出所有你关心的键,第二个选项是穷举的,尽管你可以添加一个条件来排除一些键,例如,如果你想要除了
'pbad'
和'pworse'
之外的所有键,你可以将其更改为:根据需要扩展被排除项的
set
(或者如果只想排除单个项,则缩减为if k != 'pbad'
)。