[英]Ignoring part of a key dictionary python
我想要一个字典,其中的键是元组,例如 (1, 0)。 但是,我希望 (n, 0) 形式的所有键都标识为类似的输出,如果我不必拥有从 (1, 0) 到 (n, 0) 的所有元组,那就太好了作为我字典中的键。 有没有一种简单的方法可以做到这一点?
dictionary = {(n, 1): [n, 3], (n, 2): [5, n], (n, 0): [0, n]}
如果要使用特殊规则来制作 dict 来处理实际上未存储在 dict 哈希表中的键,则需要创建一个实现__missing__
的dict
子类:
当 key 不在字典中时,由
dict.__getitem__()
调用以实现dict
子类的self[key]
。
像这样:
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]
只需将值 (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")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.