【问题标题】:one liner for conditionally replacing dictionary values一个用于有条件地替换字典值的衬垫
【发布时间】:2009-07-25 01:00:20
【问题描述】:

有没有更好的方法来使用列表理解来表达这一点?或者任何其他方式在一行中表达这一点?

我想将原始字典中的每个值替换为 col 字典中的对应值,或者如果它不在 col 字典中,则保持不变。

col = {'1':3.5, '6':4.7}
original = {'1':3, '2':1, '3':5, '4':2, '5':3, '6':4}
for entry in col.iteritems():
    original[entry[0]] = entry[1]

【问题讨论】:

  • 此代码 sn-p 不按原样运行。请提供代码 sn-p,我们可以将其粘贴到文件中并无需修改即可运行,以便我们轻松查看您在做什么。
  • @Glenn:我没有任何问题。没有语法错误,它做了我认为 OP 想要的:它更新了原始值。为什么你认为它应该失败?

标签: python refactoring dictionary list-comprehension


【解决方案1】:

我相信update 是你想要的。

更新([其他])

使用其他键/值对更新字典,覆盖现有键。 返回无。

代码:

original.update(col[user])

一个简单的测试:

user = "user"

matrix = {
    "user" : {
        "a" : "b",
        "c" : "d",
        "e" : "f",
    },
}

col = {
    "user" : {
        "a" : "b_2",
        "c" : "d_2",
    },
}

original.update(col[user])

print(original)

输出

{'a': 'b_2', 'c': 'd_2', 'e': 'f'}

【讨论】:

  • 问题是“我想用 col 字典中的相应值替换原始字典中的每个值,如果它不在 col 字典中,则保持不变。”这不会违反该声明的后半部分吗?
  • 哦,没关系。我想我读错了这个问题...col 是用于更新的字典,而不是正在更新的字典。
  • @Steve,没有。根据手册,它只覆盖现有的键。因此,如果col[user] 中没有对应的键,original 中的任何键/值对都将保持不变。在我的示例中,这是"e" : "f"
猜你喜欢
  • 2016-04-29
  • 2017-07-05
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 2022-10-04
相关资源
最近更新 更多