【问题标题】:Replace key references by corresponding values in dict values用 dict 值中的对应值替换键引用
【发布时间】:2020-05-15 15:31:32
【问题描述】:

在以下字典中,用户可以将键作为变量来定义另一个值:

d = {'a_key': 'a_value', 'b_key': 'a_key+1'}

我必须用相应的值替换这些引用,以获得所需的输出:

d = {'a_key': 'a_value', 'b_key': 'a_value+1'}

我认为这很容易,但是这几个小时后就发疯了。我得到了这个代码:

for k in d.keys():
    print("key: " + k)
    print("value: " + d[k])
    for v in d.values():
        print("value_before: " + v)
        v = v.replace(k, d[k])
        print("value_after: " + v)
print(d)

输出是:

key: a_key
value: a_value
value_before: a_value
value_after: a_value
value_before: a_key+1
value_after: a_value+1
key: b_key
value: a_key+1        # WHY??
value_before: a_value
value_after: a_value
value_before: a_key+1
value_after: a_key+1
{'a_key': 'a_value', 'b_key': 'a_key+1'}

正如我们所见,第一次迭代似乎完成了这项工作,然后被第二次取消了。我只是不明白为什么。我还尝试调整该问题的非常具体的答案:Replace values in dict if value of another key within a nested dict is found in value,但无济于事。我正在寻找一个通用答案:如何获得所需的输出?

从理论上来说,我也想了解一下为什么"b_value"被重置为a_key+1。谢谢。

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    问题是您正在修改临时变量v,但您没有将修改后的值放回字典中。

    尝试替换:

    for v in d.values():
        v = v.replace(k, d[k])
    

    与:

    for r,v in d.items():
        d[r] = v.replace(k, d[k])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2021-12-13
      • 1970-01-01
      • 2021-07-16
      • 2014-09-25
      相关资源
      最近更新 更多