python字典中的多个赋值

2024-05-21 07:00:02 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以用比下面更简洁的方式将值赋给字典的多个键?

我的意思是,让d成为一个字典,初始化如下:

d={'a':1,'b':2,'c':3}

要将值分配给多个键,我需要执行以下操作:

d['a']=10
d['b']=200
d['c']=30

我能用这样的方法达到同样的效果吗:

d['a','b','c']=10,200,30

谢谢。


Tags: 方法字典方式效果将值
3条回答

您也可以简单地使用multiple assigment semantics

d['a'], d['b'], d['c'] = 10, 200, 30

您可以使用dict.update

d.update({'a': 10, 'c': 200, 'c': 30})

这将覆盖现有键的值,并为不存在的键添加新的键-值对。

您始终可以将其包装在函数中:

def multiassign(d, keys, values):
    d.update(zip(keys, values))

即使你不知道update,你也可以这样写:

def multiassign(d, keys, values):
    for k, v in zip(keys, values):
        d[k] = v

或者您甚至可以编写一个dict子类,该子类为您提供所需的语法:

class EasyDict(dict):
    def __getitem__(self, key):
        if isinstance(key, tuple):
            return [super().__getitem__(k) for k in key]
        else:
            return super().__getitem__(key)
    def __setitem__(self, key, value):
        if isinstance(key, tuple):
            self.update(zip(key, value))
        else:
            super().__setitem__(key, value)
    def __delitem__(self, key, value):
        if isinstance(key, tuple):
            for k in key: super().__delitem__(k)
        else:
            super().__setitem__(key, value)

现在:

>>> d = {'a': 1, 'd': 4}
>>> multiassign(d, ['a', 'b', 'c'], [10, 200, 300])
>>> d
{'a': 10, 'b': 200, 'c': 300, 'd': 4}
>>> d2 = EasyDict({'a': 1, 'd': 4})
>>> d2['a', 'b', 'c'] = 100, 200, 300
>>> d2
{'a': 10, 'b': 200, 'c': 300, 'd': 4}

请注意,显然不再可能将元组用作EasyDict中的键。

另外,如果要将此用于严重的问题,您可能需要改进错误处理。(d['a', 'b'] = 1将给出一个关于zip argument #2 must support iteration的秘密消息,d['a', 'b', 'c'] = 1, 2将静默工作,对c等不做任何事情。)

相关问题 更多 >