在 Python 中使用变量作为键创建字典

Python 中使用变量作为键创建字典:

  1. 使用字典推导来迭代变量名称。
  2. 使用 eval() 函数获取每个变量的值。
  3. 返回每个键值对。
first_name = 'fql'
last_name = 'zadmei'
site = 'zadmei.com'

# ✅ 从变量创建字典(使用 eval())
my_dict = {key: eval(key) for key in ['first_name', 'last_name', 'site']}

# 👇️ {'first_name': 'fql', 'last_name': 'zadmei', 'site': 'zadmei.com'}
print(my_dict)

# -------------------------------------------------------------------
# ✅ 从变量创建字典(使用 globals())

my_dict = {key: globals()[key] for key in ['first_name', 'last_name', 'site']}

# 👇️ {'first_name': 'fql', 'last_name': 'zadmei', 'site': 'zadmei.com'}
print(my_dict)

在 Python 中使用变量作为键创建字典

我们使用字典推导来迭代包含变量名称的列表。

字典推导与列表推导非常相似。

他们对字典中的每个键值对执行一些操作,或者选择满足条件的键值对的子集。

first_name = 'fql'
last_name = 'zadmei'
site = 'zadmei.com'

my_dict = {key: eval(key)
           for key in ['first_name', 'last_name', 'site']}

# 👇️ {'first_name': 'fql', 'last_name': 'zadmei', 'site': 'zadmei.com'}
print(my_dict)

在每次迭代中,我们将变量名称分配给键并使用 eval() 函数获取相应的值。

eval 函数接受一个表达式,解析它并将其作为 Python 表达式求值,使用全局和局部字典作为全局和局部命名空间。

请注意 ,我们必须指定创建字典时将使用的变量的名称。

eval() 函数应该只与受信任的代码一起使用。 不要对用户生成的数据使用 eval()

如果在使用 eval() 时遇到 linting 错误,请改用 globals() 字典。


使用 globals() 创建一个使用变量作为键的字典

  1. 使用字典推导来迭代变量名称。
  2. 使用 globals() 字典访问每个变量的值。
  3. 返回每个键值对。
first_name = 'fql'
last_name = 'zadmei'
site = 'zadmei.com'

my_dict = {key: globals()[key] for key in ['first_name', 'last_name', 'site']}

# 👇️ {'first_name': 'fql', 'last_name': 'zadmei', 'site': 'zadmei.com'}
print(my_dict)

globals 函数返回一个实现当前模块命名空间的字典。

first_name = 'fql'
last_name = 'zadmei'
site = 'zadmei.com'

globals_dict = globals()

# 👇️ {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x109ff1a10>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/zadmei/workspace/python/study/main.py', '__cached__': None, 'first_name': 'fql', 'last_name': 'zadmei', 'site': 'zadmei.com', 'globals_dict': {...}}
print(globals_dict)

我们使用括号表示法来访问每个键的值并返回键值对。

我们也可以使用 for 循环来获得相同的结果。

first_name = 'fql'
last_name = 'zadmei'
site = 'zadmei.com'

my_dict = {}

for key in ['first_name', 'last_name', 'site']:
    my_dict[key] = globals()[key]

# 👇️ {'first_name': 'fql', 'last_name': 'zadmei', 'site': 'zadmei.com'}
print(my_dict)

我们使用 for 循环遍历包含变量名称的列表,并将每个变量名称及其值分配为字典项。

或者,我们可以将一组键值对传递给 dict() 类。

first_name = 'fql'
last_name = 'zadmei'
site = 'zadmei.com'

my_dict = dict((key, globals()[key])
               for key in ['first_name', 'last_name', 'site'])


# 👇️ {'first_name': 'fql', 'last_name': 'zadmei', 'site': 'zadmei.com'}
print(my_dict)

dict() 函数可以传递一个可迭代的键值对并返回一个新字典。