Python字典增量
Posted
技术标签:
【中文标题】Python字典增量【英文标题】:Python dictionary increment 【发布时间】:2012-10-11 03:00:49 【问题描述】:在 Python 中,在递增之前必须先检查一个键是否在字典中,这很烦人:
if key in my_dict:
my_dict[key] += num
else:
my_dict[key] = num
上面的四行有更短的替代品吗?
【问题讨论】:
你可以对两个值做同样的事情吗? 【参考方案1】:另一种选择是:
my_dict[key] = my_dict.get(key, 0) + num
【讨论】:
你可以为多个值做这件事吗?我的意思是增加一个以上的值 没有循环?由于dict
没有提供在单个表达式中访问多个元素的方法,我不知道如何。
使用循环就像 OP 在他的问题中写的那样,但每个键增加两个值而不是一个
我认为你应该为此提出一个新问题。【参考方案2】:
您有很多选择。我喜欢使用Counter
:
>>> from collections import Counter
>>> d = Counter()
>>> d[12] += 3
>>> d
Counter(12: 3)
或defaultdict
:
>>> from collections import defaultdict
>>> d = defaultdict(int) # int() == 0, so the default value for each key is 0
>>> d[12] += 3
>>> d
defaultdict(<function <lambda> at 0x7ff2fe7d37d0>, 12: 3)
【讨论】:
对于lambda: 0
,你可以直接说int
。
@hughdbrown:谢谢,我从来不知道。
@hughdbrown 如果没有您的评论,我永远不会理解 defaultdict 在做什么。谢谢。
很遗憾文档没有提到Counter
也支持默认的0功能。到目前为止,我一直在使用 Nicola 的解决方案,但没有它会更好。【参考方案3】:
你想要的叫做默认字典
见http://docs.python.org/library/collections.html#collections.defaultdict
【讨论】:
【参考方案4】:变换:
if key in my_dict:
my_dict[key] += num
else:
my_dict[key] = num
使用setdefault
:
my_dict[key] = my_dict.setdefault(key, 0) + num
【讨论】:
【参考方案5】:还有一点点不一样的setdefault
方式:
my_dict.setdefault(key, 0)
my_dict[key] += num
如果结合其他逻辑可能会有一些优势。
【讨论】:
【参考方案6】:.get
或.setdefault
中的任何一个都可以使用:
.get()
如果没有有效的键,则在函数中传递默认值
my_dict[key] = my_dict.get(key, 0) + num
.setdefault ()
创建一个传递默认值的键
my_dict[key] = my_dict.setdefault(key, 0) + num
【讨论】:
以上是关于Python字典增量的主要内容,如果未能解决你的问题,请参考以下文章