0

x 是一个元组: (x1, x2)

try:
    clusters[bestmukey].append(x)  # statment 1
except KeyError:
    clusters[bestmukey] = [x]      # statement 2

(1) 语句 1 和语句 2 如何做不同的事情?

(2) 为什么需要分隔语句?

4

3 回答 3

3

clusters[bestmukey].append(x)要求clusters[bestmukey]已经存在并且是可以附加到的列表。如果clusters没有正确的密钥,这将引发 KeyError。

clusters[bestmukey] = [x]将始终有效(只要clusters是字典,这是我的假设),并将值设置为具有一个元素的新列表。

代码的效果是,如果键不存在,则使用新的单个值创建一个列表,或者如果它已经存在,则将该值添加到现有列表中。

不使用 try/except 也可以使用defaultdict. defaultdict 有效地将这个逻辑包装到自身中。

于 2014-10-06T00:36:19.970 回答
0

显然clusters是一个dict其值是列表的。如果键存在,此代码会尝试附加到这样的列表bestmukey,但如果不存在,它会添加键并启动一个列表。

通常最好使用defaultdict

于 2014-10-06T00:36:32.093 回答
0

clusters[bestmukey] = ...clusters[bestmukey]在语句 #2 中,无论如何都会写入(它被称为左值、左值、您分配给的东西)。然而,clusters[bestmukey]在语句#1 中是一个右值(不是你分配的东西),并且在 Python 的头脑中它需要存在,否则你会得到一个错误。即使您没有收到错误(例如在 Ruby 或其他语言中),您也不会得到您可以appendon* 的东西,因此声明 #1 不适用。


*) 您可以使用defaultdict. 但那是另一回事了。

于 2014-10-06T00:37:06.877 回答