在字典理解中使用变量名作为键
Use variable name as key in dictionary comprehension
我正在尝试使用变量名称作为键并使用 numpy 数组的中位数作为值来填充字典。例如:
import numpy as np
# Make up some data
array1 = np.random.randint(255, size=(4, 4))
array2 = np.random.randint(255, size=(4, 4))
array3 = np.random.randint(255, size=(4, 4))
array4 = np.random.randint(255, size=(4, 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}
如何将变量名称作为字符串添加到字典理解中?
我认为你最好的选择是,如果你想在未来更改名称,那么你最好的选择是对名称和数组进行字典:
names = {
"array1": array1,
"array2": array2,
"array3": array3,
"array4": array4
}
d = {x:np.median(names[x]) for x in names}
使用 array1
、array2
等变量从一开始就是错误的。让我们假设这些名字是有意义的名字。
然后我们可以从变量名开始,在各种变量字典中查找它们。比如像这样:
import numpy as np
# Make up some data
array1 = np.random.randint(255, size=(4, 4))
array2 = np.random.randint(255, size=(4, 4))
array3 = np.random.randint(255, size=(4, 4))
array4 = np.random.randint(255, size=(4, 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
的变量的方法。它会忽略非本地人(但可以做到,这只是一个更复杂的表达式)。
如果可能,我建议从一开始就将变量存储在字典中,这样得到结果就很简单了:
datadict = {}
datadict["array1"] = np.random.randint(255, size=(4, 4))
datadict["array2"] = np.random.randint(255, size=(4, 4))
datadict["array3"] = np.random.randint(255, size=(4, 4))
datadict["array4"] = np.random.randint(255, size=(4, 4))
# Generate a dict with variable name key and median value
d = {k:np.median(v) for k,v in datadict.items()}
我正在尝试使用变量名称作为键并使用 numpy 数组的中位数作为值来填充字典。例如:
import numpy as np
# Make up some data
array1 = np.random.randint(255, size=(4, 4))
array2 = np.random.randint(255, size=(4, 4))
array3 = np.random.randint(255, size=(4, 4))
array4 = np.random.randint(255, size=(4, 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}
如何将变量名称作为字符串添加到字典理解中?
我认为你最好的选择是,如果你想在未来更改名称,那么你最好的选择是对名称和数组进行字典:
names = {
"array1": array1,
"array2": array2,
"array3": array3,
"array4": array4
}
d = {x:np.median(names[x]) for x in names}
使用 array1
、array2
等变量从一开始就是错误的。让我们假设这些名字是有意义的名字。
然后我们可以从变量名开始,在各种变量字典中查找它们。比如像这样:
import numpy as np
# Make up some data
array1 = np.random.randint(255, size=(4, 4))
array2 = np.random.randint(255, size=(4, 4))
array3 = np.random.randint(255, size=(4, 4))
array4 = np.random.randint(255, size=(4, 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
的变量的方法。它会忽略非本地人(但可以做到,这只是一个更复杂的表达式)。
如果可能,我建议从一开始就将变量存储在字典中,这样得到结果就很简单了:
datadict = {}
datadict["array1"] = np.random.randint(255, size=(4, 4))
datadict["array2"] = np.random.randint(255, size=(4, 4))
datadict["array3"] = np.random.randint(255, size=(4, 4))
datadict["array4"] = np.random.randint(255, size=(4, 4))
# Generate a dict with variable name key and median value
d = {k:np.median(v) for k,v in datadict.items()}