Python 地向字典添加键
Pythonically adding keys to a dict
我想添加一个计数为1的key,每增加一次就增加一次,这是一个经典的操作。这是我的常规代码。
d = OrderedDict()
for i, v in enumerate(s):
if v not in d:
d[v] = 1
else:
d[v] += 1
如何使用 setdefault
而不是 collections. Counter
的 1 行代码来完成此操作
如果这是一个列表,那么我就可以做到,
d.setdefault(v, []).append()
有没有办法用整数加法做类似的事情。
你可以这样做:
d[v] = d.get(v, 0) + 1
如果我们想乘坐单班机并允许使用itertools:
import itertools
s = [1, 2, 3, 4, 5, 6, 7, 12, 4, 7, 3]
d = {key: len(list(items)) for key, items in itertools.groupby(sorted(s))}
只需使用有序计数器即可。如果你乐于导入 OrderedDict
,没有理由,在我看来,你应该避免 Counter
.
from collections import OrderedDict, Counter
class OrderedCounter(Counter, OrderedDict):
pass
s = [3, 1, 3, 1, 2, 3, 4]
d = OrderedCounter(s)
print(d)
OrderedCounter({3: 3, 1: 2, 2: 1, 4: 1})
请注意,在 Python 3.7+ 中,您可以只使用 Counter
,因为字典是按插入顺序排列的。
我想添加一个计数为1的key,每增加一次就增加一次,这是一个经典的操作。这是我的常规代码。
d = OrderedDict()
for i, v in enumerate(s):
if v not in d:
d[v] = 1
else:
d[v] += 1
如何使用 setdefault
而不是 collections. Counter
的 1 行代码来完成此操作
如果这是一个列表,那么我就可以做到,
d.setdefault(v, []).append()
有没有办法用整数加法做类似的事情。
你可以这样做:
d[v] = d.get(v, 0) + 1
如果我们想乘坐单班机并允许使用itertools:
import itertools
s = [1, 2, 3, 4, 5, 6, 7, 12, 4, 7, 3]
d = {key: len(list(items)) for key, items in itertools.groupby(sorted(s))}
只需使用有序计数器即可。如果你乐于导入 OrderedDict
,没有理由,在我看来,你应该避免 Counter
.
from collections import OrderedDict, Counter
class OrderedCounter(Counter, OrderedDict):
pass
s = [3, 1, 3, 1, 2, 3, 4]
d = OrderedCounter(s)
print(d)
OrderedCounter({3: 3, 1: 2, 2: 1, 4: 1})
请注意,在 Python 3.7+ 中,您可以只使用 Counter
,因为字典是按插入顺序排列的。