【问题标题】:Replace item in dictionary of lists替换列表字典中的项目
【发布时间】:2021-10-14 08:04:44
【问题描述】:

我有一本像下面这样的字典:

info = {
    # Many more entries similar to this one
    'library1' : {'files' : ['path1', 'path2', 'path3_replace', 'path4']}
}

我的目标是搜索 path3_replace 并将其替换为不同的路径。这是我尝试过的:

new_path = "was_replaced"


for lib in info:
    m = info[lib]
    for path in m['files']:
        if "replace" in path:
            path = new_path
            print(path)


# Here I'm just trying to print all paths to show if it worked or not

for lib in info:
    m = info[lib]
    for path in m['files']:
        print(path)

显示的控制台输出如下:

was_replaced
path1
path2
path3_replace
path4

很明显,字典中的字符串没有被替换,仍然是path3_replace。期望的输出是:

was_replaced
path1
path2
was_replaced
path4

我怎样才能做到这一点?感谢您的帮助!

编辑:我故意让代码示例非常模糊以隔离问题

【问题讨论】:

  • 对于那些投反对票的人,我可以收到评论或理由吗?我愿意尽我所能提供帮助!

标签: python python-3.x list dictionary replace


【解决方案1】:

dict 中的字符串没有被替换,因为您从未更改过它。您更改了循环索引,而不是其数据源。要更改列表元素,您必须访问列表。

for idx, path in enumerate(m['files']):
    if "replace" in path:
        m['files'][idx] = new_path
        print(m['files'][idx])

path 只是一个局部变量。

【讨论】:

  • 太棒了!我是 python 的新手,不知道 path 只是一个局部变量,我接受了你的回答,但无法投票。非常感谢!
  • 很高兴它有帮助。是的,需要几周时间才能习惯变量的工作方式。 path 是您创建的一个新标量,它以您列表中的值的副本开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 2017-06-03
  • 1970-01-01
相关资源
最近更新 更多