忽略关键字典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的一部分的主要内容,如果未能解决你的问题,请参考以下文章

Python代码阅读(第19篇):合并多个字典

Python snippet(代码片段)

Python代码阅读(第26篇):将列表映射成字典

Python代码阅读(第40篇):通过两个列表生成字典

在 sqlalchemy 映射类构造函数中忽略额外关键字的选项?

inline内联函数