我想要一本字典,其中的键是元组,例如(1,0)。但是,我希望所有形式为(n,0)的键都具有相似的输出标识,如果我不必具有从(1,0)到(n,0)的所有元组,那将是很好的选择作为我字典中的键。有什么简单的方法可以做到吗?
dictionary = {(n, 1): [n, 3], (n, 2): [5, n], (n, 0): [0, n]}
答案 0 :(得分:1)
如果您要使用特殊规则来创建字典来处理实际上不存储在dict哈希表中的键,则需要创建实现__missing__
的dict
子类:< / p>
当键不在字典中时,由
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]
答案 1 :(得分:0)
只需将值(1,0)复制到(n,0),然后从字典中删除元素(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")