在字典理解中使用变量名作为键

问题描述

我正在尝试使用变量名称作为键并以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}