python在一个语句中减少和可能的删除

llmtgqce  于 12个月前  发布在  Python
关注(0)|答案(2)|浏览(95)

在python中,我想知道是否有以下内容的组合语句

# dct = defaultdict(int)
dct[k] -= 1
if dct[k] == 0:
    del dct[k]

字符串
或任意下限,如果低于,则删除该元素。

jucafojl

jucafojl1#

我不认为这种类型的数据结构存在,但你可以简单地为此目的创建你的函数:

from collections import defaultdict

def decrement_or_delete(dct, key, lower_bound=0):
    dct[key] -= 1
    if dct[key] <= lower_bound:
        del dct[key]

字符串
之后:

dct = defaultdict(int)
k = 'some_key'
dct[k] = 2

decrement_or_delete(dct, k)
decrement_or_delete(dct, k)

print(dct)


将输出空指令。
为什么需要特定的函数来实现此目的?

l5tcr1uw

l5tcr1uw2#

请注意,您不能对dictdefaultdict进行monkey-patch,因为它会错误地

ERROR!
Traceback (most recent call last):
  File "<string>", line 6, in <module>
TypeError: cannot set '...' attribute of immutable type 'dict'

字符串
你可以做的是子类defaultdict覆盖你想要的行为:

import collections

class mydefaultdict(collections.defaultdict):
    def __init__(self, factory):
        super().__init__(factory)
        self._factory = factory
    
    def __setitem__(self, key, value):
        super().__setitem__(key, value)
        if value == self._factory():
            super().__delitem__(key)

dct = collections.defaultdict(int)
dct['a'] = 1
dct['a'] -= 1
print('a' in dct)  # should output False, outputs True

dct = mydefaultdict(int)
dct['a'] = 1
dct['a'] -= 1
print('a' in dct)  # outputs False


请注意,这是一个临时实现,您可能需要实现一些极端情况。

相关问题