猿问

忽略关键字典python的一部分

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

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


青春有我
浏览 211回答 2
2回答

绝地无双

如果要使用特殊规则制作一个 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]

斯蒂芬大帝

只需将值 (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")
随时随地看视频慕课网APP

相关分类

Python
我要回答