问题描述
我正在尝试使用变量名称作为键并以numpy数组的中位数作为值来填充字典。例如:
import numpy as np
# Make up some data
array1 = np.random.randint(255,size=(4,4))
array2 = np.random.randint(255,4))
array3 = np.random.randint(255,4))
array4 = np.random.randint(255,4))
# Generate a dict with variable name key and median value
d = {f"{x}":np.median(x) for x in [array1,array2,array3,array4]}
这将产生:
{'[[ 27 234 43 110]\n [105 199 173 28]\n [ 97 235 32 62]\n [ 42 193 234 29]]': 101.0,'[[ 68 150 75 207]\n [156 188 47 116]\n [161 90 18 173]\n [213 12 65 216]]': 133.0,'[[188 26 229 204]\n [ 65 214 197 165]\n [ 3 86 124 221]\n [ 87 27 189 125]]': 145.0,'[[193 158 107 148]\n [187 30 38 104]\n [ 44 137 31 227]\n [243 212 25 110]]': 123.5}
但是,我想将变量名添加到字典中,而不是将numpy数组添加为字符串。这是我想要的输出:
{'array1': 101.0,'array2': 133.0,'array3': 145.0,'array4': 123.5}
解决方法
从一开始就具有 travelDate: yup.string().when('planeAvailable',{
is: '1' || '2' || '3' || '4',then: yup.string().required('Choose Date'),}),
,array1
等变量是错误的。让我们假设这些名称是有意义的名称。
然后,我们可以使用变量名开头,并在各种变量字典中查找它们。例如这样的
array2
import numpy as np
# Make up some data
array1 = np.random.randint(255,size=(4,4))
array2 = np.random.randint(255,4))
array3 = np.random.randint(255,4))
array4 = np.random.randint(255,4))
# Generate a dict with variable name key and median value
d = {x:np.median(locals().get(x,globals().get(x))) for x in ["array1","array2","array3","array4"]}
>>> d
{'array1': 156.5,'array2': 76.0,'array3': 100.0,'array4': 85.0}
是一种尝试首先在本地变量中然后在全局变量中获取名为locals().get(x,globals().get(x))
的变量的方法。它将忽略非局部变量(但是可以做到,它只是一个更加复杂的表达式)。
如果可能的话,我建议从头开始将变量存储在字典 中,然后得到的结果将是微不足道的:
x
,
我认为,如果您将来要更改名称,那么最好的选择是确定名称和数组:
names = {
"array1": array1,"array2": array2,"array3": array3,"array4": array4
}
d = {x:np.median(names[x]) for x in names}