python中嵌套字典的setDefault

Jay*_*nth 5 python dictionary

如何在 python 中将 setdefault 用于嵌套字典结构。例如..

self.table[field] = 0
self.table[date] = []
self.table[value] = {}
Run Code Online (Sandbox Code Playgroud)

我想为这些设置默认值。

unu*_*tbu 1

假设self.table是一个字典,你可以使用

self.table.setdefault(field,0)
Run Code Online (Sandbox Code Playgroud)

其余的都类似。请注意,如果self.table已经有一个 key field,则返回与该键关联的值。仅当没有键时才field设置self.table[field]为0。

编辑:也许这更接近你想要的:

import collections
class Foo(object):
    def __init__(self):
        self.CompleteAnalysis=collections.defaultdict(
            lambda: collections.defaultdict(list))

    def getFilledFields(self,sentence):
        field, field_value, field_date = sentence.split('|')
        field_value = field_value.strip('\n')
        field_date = field_date.strip('\n')
        self.CompleteAnalysis[field]['date'].append(field_date)
        self.CompleteAnalysis[field]['value'].append(field_value) 

foo=Foo()
foo.getFilledFields('A|1|2000-1-1')
foo.getFilledFields('A|2|2000-1-2')
print(foo.CompleteAnalysis['A']['date'])
# ['2000-1-1', '2000-1-2']

print(foo.CompleteAnalysis['A']['value'])
# ['1', '2']
Run Code Online (Sandbox Code Playgroud)

也许不需要跟踪计数,而只需获取列表的长度:

print(len(foo.CompleteAnalysis['A']['value']))
# 2
Run Code Online (Sandbox Code Playgroud)