更新python中多个键的值

时间:2013-10-11 23:11:37

标签: python dictionary tuples

将字典中多个键的值更新为元组中存储的值的最简洁方法是什么?

示例:

我想从

开始
>>>mydict = {'a':None, 'b':None, 'c':None, 'd':None}
>>>mytuple = ('alpha', 'beta', 'delta')

>>>print mydict
{'a':'alpha', 'b':'beta', 'c':None, 'd':'delta'}

这有一个简单的单行程吗?像this这样的东西似乎正在接近我想要的东西。

编辑: 我不希望根据键的第一个字母为键指定值。我只是希望像

这样的东西
mydict('a','b','d') = mytuple

显然这不起作用,但我希望有类似的东西。

4 个答案:

答案 0 :(得分:4)

如果您正在尝试创建新词典:

d = dict(zip(keys, valuetuple))

如果您尝试添加到现有帐户,只需将=更改为.update(…)

所以,你的例子可以写成:

mydict.update(dict(zip('abd', mytuple))))

如果你不止一次这样做,我会把它包装成一个函数,所以你可以写:

setitems(d, ('a', 'b', 'd'), mytuple)

或者可能是一个“curried”函数,与operator.itemgetter相似?

答案 1 :(得分:0)

你可以使用列表理解来使它成为一个单行,虽然它不是超级有效。

keys = [ 'a', 'b', 'c', 'd']
values = ['alpha', 'beta', 'delta']
dictionary = dict([(k,v) for k in keys for v in values if v.startswith(k)])
print dictionary #prints {'a': 'alpha', 'b': 'beta', 'd': 'delta'}

答案 2 :(得分:0)

假设关联键< - > value是值的第一个字母,是键的第一个字母。

dict( (v[0],v) for v in mytuple if v[0] in mydict)

答案 3 :(得分:0)

在这种情况下,我会避免使用单行。它使代码更具可读性。

for t in mytuple:
    if t[0] in mydict.keys():
        mydict[t[0]] = t

如果您想添加mytuple项,即使该键不存在,只需删除if语句。