首页 > 解决方案 > 每个值有多个键,有特殊要求

问题描述

我有d一个带有现有字典的示例:

x = d['a'] = d['b'] = d['c'] = (1, 2) # Too verbose

我想要的是这样的:

x = d['a','b','c'] = (1, 2) # Would be ideal but yields d[('a','b','c')]

但是,这不会重现该示例,因为它将一个元组分配('a','b','c')为键。

我知道.update()ordict.fromkeys()方法,但都不合适。第一个它不返回任何东西,第二个它除了不返回(1,2)x 之外还创建一个新的 dict。

简而言之,我想要这样的表达:

x = ... = (1,2) 

它将分配(1,2)给 keys 'a''b'并且'c'仍然d将值返回给x.

这是一个讲座/尝试最大化我的代码的一致性和可读性。

标签: pythondictionary

解决方案


您将需要一个继承自dict并执行所需操作的类,例如以下示例:

class MyDict(dict):
    def __setitem__(self, key, value):
        if isinstance(key, tuple):
            for arg in key:
                super(MyDict, self).__setitem__(arg, value)

d = MyDict()
x = d["a", "b", "c"] = (1, 2)
x == d["a"] == d["b"] == d["c"] == (1, 2)  # True

推荐阅读