1

我正在尝试用一个语句在字典中创建字典。如果密钥不存在,则应创建它。

我现在拥有的代码片段:

self.data[self.stringvar1.get()] = { date : (int(self.total.get()), int(self.resources.get())) }

这不会创建新键,但会覆盖 self.data,即使 stringvar1 不同。我尝试了几个选项,但找不到我想要的。我是否必须手动检查密钥是否存在,或者是否有一个简单的习惯用法?

4

2 回答 2

2

一种选择是制作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()))
于 2012-07-18T10:01:28.583 回答
0

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.
于 2012-07-18T10:16:22.607 回答