【问题标题】:Update values for multiple keys in python更新python中多个键的值
【发布时间】:2013-10-20 03:38:13
【问题描述】:

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

例子:

我想离开

>>>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

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

【问题讨论】:

  • 您在脑海中使用什么规则将值alpha 与键a 关联?该值以a开头?
  • @ipinak:我没有看到相关性
  • 埃里克,很抱歉在我最初的问题中不清楚。我已经更新了它以反映我想要的。
  • @eric 该帖子的第一个答案给出了所请求问题的答案。不知何故,这是间接的,但答案仍然存在。我没有说它是重复的,我只是转发那个帖子。所以,我相信这是相关的。

标签: python dictionary tuples


【解决方案1】:

您可以使用列表推导来使其成为单行,虽然它不是超级高效。

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'}

【讨论】:

  • 贾斯汀,这不是我想要的。我想用元组中的值更新字典中的现有键。感谢您提供额外的startswith方法,但这是不必要的 - 我已经更新了我的问题以反映它没有必要。
【解决方案2】:

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

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

【讨论】:

  • 这种东西用字典理解可以写得稍微整齐一些:{v[0]: v for v in mytuple if v[0] in mydict}
  • 这错过了c 键。结果将是{'a': 'alpha', 'b': 'beta', 'd': 'delta'}
【解决方案3】:

如果您尝试创建新字典:

d = dict(zip(keys, valuetuple))

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

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

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

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

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

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

【讨论】:

  • 这行得通! mydict.update(dict(zip(['a','b','d'],mytuple))) 创造了奇迹!
  • @nfazzio:我刚刚意识到我使用 'abd' 作为 ['a', 'b', 'd'] 的简写。这会起作用(因为字符串是由 1 个字符组成的字符串序列),但我认为你的方式更清晰。
【解决方案4】:

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

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

如果您想在 key 不存在的情况下添加 mytuple 项,只需删除 if 语句即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    相关资源
    最近更新 更多