x是一个元组:(x1,x2)
try:
clusters[bestmukey].append(x) # statment 1
except KeyError:
clusters[bestmukey] = [x] # statement 2
(1)陈述1和陈述2如何做不同的事情?
(2)为什么需要分开的陈述?
答案 0 :(得分:3)
clusters[bestmukey].append(x)
要求clusters[bestmukey]
已存在,并且是可附加到的列表。如果clusters
没有正确的密钥,则会引发KeyError。
clusters[bestmukey] = [x]
将始终有效(只要clusters
是字典,这就是我所假设的),并将值设置为包含一个元素的新列表。
如果密钥尚不存在,代码的作用是创建一个包含新单值的列表,或者如果该值已经存在,则将该值添加到现有列表中。
除非使用defaultdict
,否则无需尝试/可以实现相同的效果。 defaultdict有效地将这个逻辑包装在其中。
答案 1 :(得分:0)
显然clusters
是dict
,其值是列表。如果密钥bestmukey
存在,此代码会尝试附加到此类列表,但如果密钥不存在,则会添加密钥并启动列表。
通常最好使用defaultdict
答案 2 :(得分:0)
clusters[bestmukey] = ...
将写入clusters[bestmukey]
,无论是什么(它被称为左值,左值,你指定的东西)。但是,声明#1中的clusters[bestmukey]
是一个右值(不是你指定的),而且在Python中它需要存在,否则就会出错。即使你没有收到错误(比如Ruby或其他语言),你也不会得到append
*上的内容,所以声明#1不适用。
*)您可以使用defaultdict
。但这是另一个故事。