忽略密钥字典python的一部分

时间:2018-09-01 09:17:57

标签: python dictionary key tuples

我想要一本字典,其中的键是元组,例如(1,0)。但是,我希望所有形式为(n,0)的键都具有相似的输出标识,如果我不必具有从(1,0)到(n,0)的所有元组,那将是很好的选择作为我字典中的键。有什么简单的方法可以做到吗?

dictionary = {(n, 1): [n, 3], (n, 2): [5, n], (n, 0): [0, n]}

2 个答案:

答案 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")