Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
忽略关键字典python的一部分_Python_Dictionary_Key_Tuples - Fatal编程技术网

忽略关键字典python的一部分

忽略关键字典python的一部分,python,dictionary,key,tuples,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]} 如果要使用特殊规则生成dict,以处理实际上未存储在dict哈希表中的键,则需要创建一个子类dict,该子类实现: 由dict.\uuu getitem\

我想要一个字典,其中的键是元组,比如(1,0)。但是,我希望(n,0)形式的所有键都能以类似的输出进行标识,如果我不必将(1,0)到(n,0)之间的所有元组作为字典中的键,那就太好了。有没有一个简单的方法可以做到这一点

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

如果要使用特殊规则生成dict,以处理实际上未存储在dict哈希表中的键,则需要创建一个子类
dict
,该子类实现:

dict.\uuu getitem\uuuu()
调用,以在键不在字典中时为
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)
键存储了一个值,它将不会调用该键的
\uuuu missing\uuuu
,允许您覆盖单个
(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()将值转换为tuple,然后用键获取差异。例如:

 for key in dictionary:
    if set(key) - set(dictionary[key]) is set():
       print("Similar key value pair")

用“n”作为键和值列表重建dict?您是想让所有
(n,0)
键共享一个值,还是想让任何
(n,0)
键映射到
[0,n]
,而不存储无限多的项?我希望它们都映射到
[0,n]