2012-07-18 72 views
1

我想用一条语句在字典里面创建一个字典。如果密钥不存在,应该创建它。在Python 3.2中添加字典到字典里

一个代码片断什么,我现在有:

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

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

回答

2

一个选项是制作self.data a collections.defaultdict(dict)。在这个defaultdict访问不存在的键会自动创建一个该键的新字典,你可以简单地使用

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

。请注意,defaultdict自带的隐藏漏洞的风险,因为你永远不会得到一个KeyError。另一种方法是使用普通的dictsetdefault()方法:

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

这失败时stringvar1 .get() - 键尚未创建。 – schme 2012-07-18 10:04:39

+0

@skhme:编辑。现在好多了? – 2012-07-18 10:09:59

+0

Setdefault方法就像一个魅力。然而,要检查哪些收藏品可以做到总体,但我相信我有解决方案。 – schme 2012-07-18 10:15:27

0

这更是一个思想比答案(也许是因为我是一个“新”的用户我不能添加评论)的。

要合并的字典,你可以尝试做这样的事情:

var = dict(dict1.items() + dict2.items()) 

,作为添加如果它不存在的关键,你可能要检查:

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.