将字典中多个键的值更新为元组中存储的值的最简洁方法是什么?
示例:
我想从
开始>>>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
显然这不起作用,但我希望有类似的东西。
答案 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
语句。