解释Python代码

时间:2013-12-12 16:24:52

标签: python dictionary

我正在尝试理解下面的python代码。

这是我的解释。

 def __init__(self):
    self.intermediate = {}
    self.result = []

中间和结果是变量。 中间词是dict类型。 结果是类型列表

  def emit_intermediate(self, key, value):
    self.intermediate.setdefault(key, [])
    self.intermediate[key].append(value)

如果key在字典中间,则从此方法返回其值。 (这行:self.intermediate [key] .append(value)如果返回值仍会执行吗?) 如果密钥不在字典中,则将具有空列表值的密钥插入字典中间。 如果已插入密钥,则将该值附加到与密钥关联的列表中。

def emit(self, value):
    self.result.append(value)

将值附加到结果列表

这是整个代码:

  def __init__(self):
        self.intermediate = {}
        self.result = []

    def emit_intermediate(self, key, value):
        self.intermediate.setdefault(key, [])
        self.intermediate[key].append(value)

    def emit(self, value):
        self.result.append(value) 

1 个答案:

答案 0 :(得分:1)

self.intermediate.setdefault(key, [])

告诉您如果密钥尚未出现,密钥的价值是多少。 因此,如果您插入的密钥不在self.intermediate中,则会使用该密钥创建一个新条目,并为其指定值[]

然后下一行“self.intermediate[key].append(value)”(总是执行)始终有一个可以追加的列表;来自self.intermediate.setdefault(key, [])的新作品或之前创作的作品。

所以:

someobjectofthisclass.emit_intermediate("foo", 1)
print(someobjectofthisclass.intermediate)
>> {"foo":[1]}

someobjectofthisclass.emit_intermediate("foo", 1)
someobjectofthisclass.emit_intermediate("foo", 2)
someobjectofthisclass.emit_intermediate("bar", 1)
print(someobjectofthisclass.intermediate)
>> {"foo":[1,1,2], "bar":[1]}