在Python中设置嵌套字典的默认值

5
如何在Python中使用setdefault对嵌套字典结构进行操作。 例如...
self.table[field] = 0
self.table[date] = []
self.table[value] = {}

我想为这些设置默认值。
1个回答

1

假设self.table是一个字典,您可以使用以下代码:

self.table.setdefault(field,0)

其余的都类似。请注意,如果self.table已经有一个键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']

不必跟踪计数,可以直接获取列表的长度:

print(len(foo.CompleteAnalysis['A']['value']))
# 2

谢谢,还有一个问题,我该如何设置 self.table[tablename][field][count] = 0? - Jayanth
1
尝试类似这样的代码,但是不起作用 :-(( def getFilledFields(self, sentence): count = 0 date = [] value = [] field = sentence.split('|')[0] field_value = sentence.split('|')[1].strip('\n') field_date = sentence.split('|')[2].strip('\n') try: self.CompleteAnalysis[field][count] = self.CompleteAnalysis[field][count] + 1 except: self.CompleteAnalysis[field][count] = 0 self.CompleteAnalysis[field][date].append(field_date) self.CompleteAnalysis[field][value].append(field_value) - Jayanth
你能否在你的问题中加入一个示例句子和调用 self.getFilledFields(sentence) 后想要 self.CompleteAnalysis 看起来像什么?我有个猜测,但不太确定。 - unutbu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接