关于python:更好的方式来编写’分配A或如果不可能 – B’

Better way to write 'assign A or if not possible - B'

本问题已经有最佳答案,请猛点这里访问。

因此,在我的代码中,我有一本字典,用来计算我以前不知道的项目:

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

显然,我不能增加一个还不存在的值的条目。出于某种原因,我有一种感觉(在我还没有经验的Python大脑中),可能存在一种更为Python式的方式来实现这一点,比如说,一些构造允许将表达式的结果赋给一个事物,如果不可能,则在一个语句中赋给其他事物。

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


对于来自collections的defaultdict来说,这看起来是一个不错的工作。请注意以下示例:

1
2
3
4
5
6
7
8
9
>>> 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

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

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

还有一些不错的奖金。如most_common

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

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


使用get方法

1
2
3
4
5
6
7
>>> d = {}
>>> d['a'] = d.get('a', 0) + 1
>>> d
{'a': 1}
>>> d['b'] = d.get('b', 2) + 1
>>> d
{'b': 3, 'a': 1}