如何在字符串中搜索字典键并将其替换为值

时间:2017-10-18 12:19:25

标签: python dictionary

我有一个由CSV阅读器创建的字典,其中列A具有原始名称,列B具有更新的名称。

dict[key] = {value}

我从数据库中选择一个值,目标是使用键搜索该字符串并将其替换为值。

最终将通过UPDATE语句更新。但是,如果字符串不包含任何'键'的任何实例,则检查完成非常重要。并且具有价值'然后它从更新中跳过并且没有传递给dict。

搜索字符串的最佳方法是什么?因为它正在进行重复替换。我想"匹配案例"整个字符串。

name = 'de testing       nl testing       es testing_updated       en testing_updated       it testing       fr testing_updated'
dict["testing"] = {"testing_updated"}
for key,value in dict.items():
    if str(key) not in name and list(value)[0] in name:
        print("{} has already been replaced with {}".format(key,value))
    else:
        name = name.replace(str(key),list(value)[0])
        print(name)

输出:

de testing_updated       nl testing_updated       es testing_updated_updated       en testing_updated_updated       it testing_updated       fr testing_updated_updated

如果检查通过并且名称正确更新(它不是),最终将它传递给新字典,然后使用字典编译sql update语句。

2 个答案:

答案 0 :(得分:0)

如果将"testing"替换为"testing_updated",则生成的字符串仍然包含字符串"testing",因此您的检查无法识别它已更新。

您可以使用"testing ""testing_updated "之类的内容,而不是使用尾随空格或制表符,但根据您的实际数据,这可能不适用于所有情况。

如果我理解正确,您有一个包含更新和未更新元素的字符串。在这种情况下,您应该首先使用str.split将字符串拆分为包含元素,然后单独处理元素。

答案 1 :(得分:0)

陈述,您有CSV格式的替换说明: 1 A B 2 B C ....

如果您有一个字符串“AB”并按顺序应用搜索/替换,您的字符串最终为“CC”,而不是“BC”。

您有两种解决方法:

  1. 进行所有搜索,然后进行所有替换。实现起来非常棘手,因为你必须将输入字符串切成碎片
  2. 修改您的说明以引入输入字符串中不存在的键: 1 A DISTINGUISH_A 2 B DISTINGUISH_B .... .... 11 DISTINGUISH_A B 12 DISTINGUISH_B C
  3. 方式2很有趣,因为主循环不会改变:搜索和替换的顺序。并且,准备修改的指令也可以自动化。