8

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

例子:

我想从

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

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

是否有一个简单的单线?这样的事情似乎越来越接近我想要的。

编辑:我不希望根据第一个字母为键赋值。我只是希望有类似的东西

mydict('a','b','d') = mytuple

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

4

4 回答 4

6

如果您尝试创建新字典:

d = dict(zip(keys, valuetuple))

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

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

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

如果您不止一次这样做,我会将其包装在一个函数中,这样您就可以编写:

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

或者也许是一个与 operator.itemgetter 平行的“咖喱”函数?

于 2013-10-11T23:32:59.467 回答
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'}
于 2013-10-11T23:24:36.480 回答
0

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

dict( (v[0],v) for v in mytuple if v[0] in mydict)
于 2013-10-11T23:29:41.060 回答
0

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

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

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

于 2013-10-11T23:39:37.823 回答