在字典中添加新列表或附加到列表(如果存在)是不是有一个很好的习语?

Posted

技术标签:

【中文标题】在字典中添加新列表或附加到列表(如果存在)是不是有一个很好的习语?【英文标题】:Is there a nice idiom for adding a new list or appending to a list (if present) in a dictionary?在字典中添加新列表或附加到列表(如果存在)是否有一个很好的习语? 【发布时间】:2012-03-07 10:40:27 【问题描述】:

这是我第二次实现这样的东西,我怀疑必须有更好的(阅读:更多pythonic)方法来做到这一点:

phone_book = 

def add_number(name,number):
  if name in phone_book:
    phone_book['name'].append(number)
  else:
    phone_book['name'] = [number]

我意识到使用条件赋值可能会使代码更简洁,但我怀疑可能有更好的方法来解决这个问题。我对只缩短代码不感兴趣。

【问题讨论】:

【参考方案1】:

是的,您可以使用defaultdict。有了这个dict 子类,当你访问字典中的一个元素时,如果一个值不存在,它会使用你指定的构造函数自动创建一个。

from collections import defaultdict
phone_book = defaultdict(list)

def add_number(name, number):
    phone_book[name].append(number)

【讨论】:

【参考方案2】:

像这样使用dictsetdefault

phone_book.setdefault('name', []).append(number)

【讨论】:

以上是关于在字典中添加新列表或附加到列表(如果存在)是不是有一个很好的习语?的主要内容,如果未能解决你的问题,请参考以下文章

在每次迭代期间将新值附加到列表中后,将列表值添加到字典中

如果不存在,如何创建列表,如果不存在,如何添加到列表中

为字典中的一个键附加多个值[重复]

遍历字典列表并 1) 将流值与流列元素进行比较 2) 如果匹配,则附加一个带有数据的新列表

给定一个字符串列表,如果任何值等于列表中的值,我想将字典的值添加到新字典中[重复]

添加将字典附加到另一个 multiprocessing.managers.DictProxy 中的列表