0

所以,在我的代码中,我有一本字典,用来计算我事先不知道的项目:

if a_thing not in my_dict:
    my_dict[a_thing] = 0
else:
    my_dict[a_thing] += 1

显然,我不能增加一个尚不存在的值的条目。出于某种原因,我有一种感觉(在我仍然没有 Python 经验的大脑中)可能存在一种更 Pythonic 的方式来做到这一点,例如,一些允许将表达式的结果分配给事物的构造,如果不可能的话else在单个语句中

那么,在 Python 中是否存在类似的东西?

4

2 回答 2

5

这对于defaultdict来说看起来不错,来自collections. 观察下面的例子:

>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> d['a'] += 1
>>> d
defaultdict(<class 'int'>, {'a': 1})
>>> d['b'] += 1
>>> d['a'] += 1
>>> d
defaultdict(<class 'int'>, {'b': 1, 'a': 2})

defaultdict将采用一个参数来指示您的初始值。在这种情况下,您正在递增整数值,因此您需要int.

或者,由于您正在计算项目,您也可以(如评论中所述)使用Counter最终将为您完成所有工作:

>>> d = Counter(['a', 'b', 'a', 'c', 'a', 'b', 'c'])
>>> d
Counter({'a': 3, 'c': 2, 'b': 2})

它还附带一些不错的奖金。喜欢most_common

>>> d.most_common()
[('a', 3), ('c', 2), ('b', 2)]

现在你有一个命令给你最常见的计数。

于 2016-10-22T15:28:37.620 回答
1

使用get方法

>>> d = {}
>>> d['a'] = d.get('a', 0) + 1
>>> d
{'a': 1}
>>> d['b'] = d.get('b', 2) + 1
>>> d
{'b': 3, 'a': 1}
于 2016-10-22T15:33:28.293 回答