【问题标题】:Name a dictionary from a variable value [duplicate]从变量值命名字典[重复]
【发布时间】:2025-12-08 11:40:01
【问题描述】:

如何根据变量值给字典命名?

我正在尝试构建的示例:

apache['name'] = "Apache Web Server"
apache['category'] = "web"
apache['version'] = "2.2.14-4"

但是我事先不知道字典的名称,它作为变量到达,例如dname = 'apache'。 Dname 是从文本文件中解析出来的。逻辑是:“分隔符后的第一个单词是 dict_name;接下来的 n 行被拆分为 dict_name 的键:值对;跳到下一个分隔符;重复直到结束”。

什么不起作用:

key = 'category'
value = 'web'

dname[key] = value

TypeError: 'str' object does not support item assignment

eval(dname)[key] = value

NameError: name 'apache' is not defined

getattr(dname, '__contains__')[key] = value

以及使用来自dir(dname) 的关键字的类似尝试只会产生错误。 (因为 getattr 只适用于函数和模块?)

来自How to create a dictionary based on variable value in Python 我被介绍给vars(),但它希望字典已经存在?

vars(dname)[key] = value

TypeError: vars() argument must have __dict__ attribute

这个问题的标题是我发现的最接近我所追求的东西,但答案是关于使用变量作为键,而不是字典名称:Create a dictionary with name of variable

【问题讨论】:

  • 给我们一些背景信息,它是从哪里“到达”的?
  • @NPE 它是从文本文件中解析出来的:“分隔符后的第一个单词是 dict_name;接下来的 n 行被拆分为 dict_name 的键:值对;跳到下一个分隔符;重复直到结束”
  • 哦,所以你想创建一个具有这个名字的字典?
  • 这里已经有答案了。 *.com/questions/11553721/…
  • 你为什么不把字典放在另一个字典里,'apache' 是关键?

标签: python dictionary


【解决方案1】:

从 cmets 中的讨论可以看出,您正在尝试创建一个名称包含在另一个变量中的变量。

下面展示了如何做到这一点:

d = {}
d["name"] = "Apache Web Server"
d["category"] = "web"
d["version"] = "2.2.14-4"

locals()["apache"] = d

print apache

这会创建一个局部变量,还要看看globals()

【讨论】:

  • 如果把这段代码放在一个函数里面就不行了
  • @stalk:首先,要求完全不明确;很可能一个局部变量就是 OP 所需要的。其次,看答案的最后一句话。
  • 嗯,我认为从函数中修改globals() 不是一个好主意
  • @stalk:发表含糊的反对意​​见不是很有建设性。如果您有更好的解决方案,请将其作为答案发布(如果它很好,我很乐意为它投票)。
  • 根据this 的回答,在运行时无法在函数内部创建局部变量。那么,为什么要在全局命名空间中修改 locals 而不是 globals?我想,他们在这里是一样的。