在没有键的情况下Python字典的默认值

10 浏览
0 Comments

在没有键的情况下Python字典的默认值

这个问题已经有了答案

如何在Python中将字典对象的所有键设置为默认值?

如何计算列表项的出现次数?

如何添加或增加字典实体?

Python:字典列表,如果存在则增加字典值,如果不存在则追加一个新的字典

有没有更优雅的方法实现这个目标:如果键存在,则将其值增加1,否则创建键并将其值设置为1。

histogram = {}
...
if histogram.has_key(n):
    histogram[n] += 1
else: 
    histogram[n] = 1

admin 更改状态以发布 2023年5月24日
0
0 Comments

from collections import Counter
histogram = Counter()
...
histogram[n] += 1

对于数值以外的值,请查看collections.defaultdict。 在这种情况下,您可以使用defaultdict(int)而不是Counter,但是Counter具有附加功能,例如.elements().most_common()defaultdict(list)是另一个非常有用的例子。

Counter还有一个方便的构造函数。而不是:

histogram = Counter()
for n in nums:
    histogram[n] += 1

您可以通过以下方法来执行:

histogram = Counter(nums)

其他选项:

histogram.setdefault(n, 0)
histogram[n] += 1

histogram[n] = histogram.get(n, 0) + 1

在列表的情况下,setdefault可能更有用,因为它返回值,即:

dict_of_lists.setdefault(key, []).append(value)

最后作为额外奖励,现在略微偏离轨道,这是我最常见的defaultdict使用方法:

def group_by_key_func(iterable, key_func):
    """
    Create a dictionary from an iterable such that the keys are the result of evaluating a key function on elements
    of the iterable and the values are lists of elements all of which correspond to the key.
    >>> dict(group_by_key_func("a bb ccc d ee fff".split(), len))  # the dict() is just for looks
    {1: ['a', 'd'], 2: ['bb', 'ee'], 3: ['ccc', 'fff']}
    >>> dict(group_by_key_func([-1, 0, 1, 3, 6, 8, 9, 2], lambda x: x % 2))
    {0: [0, 6, 8, 2], 1: [-1, 1, 3, 9]}
    """
    result = defaultdict(list)
    for item in iterable:
        result[key_func(item)].append(item)
    return result

0