我正在尝试用一个语句在字典中创建字典。如果密钥不存在,则应创建它。
我现在拥有的代码片段:
self.data[self.stringvar1.get()] = { date : (int(self.total.get()), int(self.resources.get())) }
这不会创建新键,但会覆盖 self.data,即使 stringvar1 不同。我尝试了几个选项,但找不到我想要的。我是否必须手动检查密钥是否存在,或者是否有一个简单的习惯用法?
我正在尝试用一个语句在字典中创建字典。如果密钥不存在,则应创建它。
我现在拥有的代码片段:
self.data[self.stringvar1.get()] = { date : (int(self.total.get()), int(self.resources.get())) }
这不会创建新键,但会覆盖 self.data,即使 stringvar1 不同。我尝试了几个选项,但找不到我想要的。我是否必须手动检查密钥是否存在,或者是否有一个简单的习惯用法?
一种选择是制作self.data
一个collections.defaultdict(dict)
. 在此访问不存在的键defaultdict
会自动为此键创建一个新字典,您可以简单地使用
self.data[self.stringvar1.get()][date] = (
int(self.total.get()), int(self.resources.get()))
请注意, adefaultdict
存在隐藏错误的风险,因为您永远不会得到 a KeyError
。另一种方法是使用普通dict
的和setdefault()
方法:
self.data.setdefault(self.stringvar1.get(), {})[date] = (
int(self.total.get()), int(self.resources.get()))
This is more of an idea than an answer (maybe I can't add comments because I'm a 'new' user).
To merge dictionaries you might try doing something like:
var = dict(dict1.items() + dict2.items())
As for adding the key if it doesn't exist, you might want to check:
setdefault(key[, default])
If key is in the dictionary, return its value. If not, insert key with a value of default and return default. default defaults to None.