忽略关键字典python的一部分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了忽略关键字典python的一部分相关的知识,希望对你有一定的参考价值。
我想要一个字典,其中键是元组,如(1,0)。但是,我希望表单(n,0)中的所有键都能识别出类似的输出,如果我不必拥有从(1,0)到(n,0)的所有元组,那就太好了。作为我词典中的键。有一种简单的方法可以做到这一点吗?
dictionary = {(n, 1): [n, 3], (n, 2): [5, n], (n, 0): [0, n]}
答案
如果你想创建一个带有特殊规则的dict来处理实际上没有存储在dict哈希表中的键,你想要创建一个实现dict
的__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")
以上是关于忽略关键字典python的一部分的主要内容,如果未能解决你的问题,请参考以下文章