2 回答
TA贡献1946条经验 获得超4个赞
如果要使用特殊规则制作一个 dict 来处理实际上未存储在 dict 哈希表中的键,则需要创建dict该 implementations的子类__missing__:
通过调用dict.__getitem__()来实现self[key]的dict子类时,关键是不是在字典。
像这样:
class SpecialDict(dict):
def __missing__(self, key):
if isinstance(key, tuple) and len(key) == 2 and key[1] == 0:
return [0, key]
raise KeyError(key)
我不太明白你的例子应该如何工作,所以这里有一个不同的例子来证明它:
>>> d = SpecialDict({(1, 1): [2, 3], (1, 2): [5, 4]})
>>> d[1, 1]
[2, 3]
>>> d[2, 2]
KeyError: (2, 2)
>>> d[20, 0]
[0, 20]
如果您为一个(n, 0)键存储一个值,它不会调用__missing__该键,允许您覆盖单个键,(n, 0)同时保留其余键的特殊规则:
>>> d[42, 0] = [23, 23]
>>> d[42, 0]
[23, 23]
>>> d[23, 0]
[0, 23]
TA贡献1827条经验 获得超8个赞
只需将值 (1,0) 复制到 (n,0),然后从 dict 中删除元素 (1,0)。像这些:
dictionary[n,0] = dictionary[1,0]
del dictionary[1,0]
等等,但是为了识别类似的输出,你必须使用 set() 将值变成元组,然后用键取差异。像这些:
for key in dictionary:
if set(key) - set(dictionary[key]) is set():
print("Similar key value pair")
添加回答
举报