在python中,我想知道是否有以下内容的组合语句
# dct = defaultdict(int) dct[k] -= 1 if dct[k] == 0: del dct[k]
字符串或任意下限,如果低于,则删除该元素。
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)
型将输出空指令。为什么需要特定的函数来实现此目的?
l5tcr1uw2#
请注意,您不能对dict或defaultdict进行monkey-patch,因为它会错误地
dict
defaultdict
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
型请注意,这是一个临时实现,您可能需要实现一些极端情况。
2条答案
按热度按时间jucafojl1#
我不认为这种类型的数据结构存在,但你可以简单地为此目的创建你的函数:
字符串
之后:
型
将输出空指令。
为什么需要特定的函数来实现此目的?
l5tcr1uw2#
请注意,您不能对
dict
或defaultdict
进行monkey-patch,因为它会错误地字符串
你可以做的是子类
defaultdict
覆盖你想要的行为:型
请注意,这是一个临时实现,您可能需要实现一些极端情况。