小编Cer*_*rno的帖子

python dict:get vs setdefault

以下两个表达式似乎与我相同.哪个更好?

data = [('a', 1), ('b', 1), ('b', 2)]

d1 = {}
d2 = {}

for key, val in data:
    # variant 1)
    d1[key] = d1.get(key, []) + [val]
    # variant 2)
    d2.setdefault(key, []).append(val)
Run Code Online (Sandbox Code Playgroud)

结果是一样的,但哪个版本更好或更富有pythonic?

就个人而言,我觉得版本2难以理解,因为对我而言,setdefault非常难以掌握.如果我理解正确,它会在字典中查找"key"的值,如果不可用,则在"dict"中输入"[]",返回对值或"[]"的引用,并在其中附加"val"参考.虽然顺利但它至少不是直观的(至少对我而言).

在我看来,版本1更容易理解(如果可用,获取"key"的值,如果没有,获取"[]",然后加入由[val]组成的列表并将结果放在"key"中).但是,虽然更直观地理解,但我担心这个版本的性能会降低,所有这些列表都会创建.另一个缺点是"d1"在表达式中出现两次,这是相当容易出错的.可能有一个更好的实现使用get,但目前它没有我.

我的猜测是版本2虽然对于没有经验的人来说更难掌握,但速度更快,因此更可取.意见?

python dictionary get setdefault

46
推荐指数
5
解决办法
4万
查看次数

标签 统计

dictionary ×1

get ×1

python ×1

setdefault ×1