为了账号安全,请及时绑定邮箱和手机立即绑定

忽略关键字典python的一部分

忽略关键字典python的一部分

青春有我 2021-06-04 13:14:17
我想要一个字典,其中的键是元组,例如 (1, 0)。但是,我希望 (n, 0) 形式的所有键都标识为类似的输出,如果我不必拥有从 (1, 0) 到 (n, 0) 的所有元组,那就太好了作为我字典中的键。有没有一种简单的方法可以做到这一点?dictionary = {(n, 1): [n, 3], (n, 2): [5, n], (n, 0): [0, n]}
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

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


查看完整回答
反对 回复 2021-06-08
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

只需将值 (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")


查看完整回答
反对 回复 2021-06-08
  • 2 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信