首页 > 解决方案 > python字典中的值被转换为双引号而不是单引号

问题描述

我有一本包含以下值的字典:-

test_dict = {'a': ['a1', 'a2'], 'b': ['1.1.1.1:1111', '2.2.2.2:2222', '3.3.3.3:3333,4.4.4.4:4444', '5.5.5.5:5555']}

我需要用 ( ) 替换逗号 ( ,)3.3.3.3:33334.4.4.4:4444( ',) ,它是(单引号逗号空格),就像其他逗号一样。

我尝试了下面的代码,但输出带有双引号 ( ")

val = ','
valnew = '\', \''  # using escape characters - all are single quotes
for k, v in test_dict.items():
    for i, s in enumerate(v):
        if val in s:
           v[i] = s.replace(val, valnew)

print(test_dict)

输出:

{'a': ['a1', 'a2'], 'b': ['1.1.1.1:1111', '2.2.2.2:2222', "3.3.3.3:3333', '4.4.4.4:4444", '5.5.5.5:5555']}

预期输出:

{'a': ['a1', 'a2'], 'b': ['1.1.1.1:1111', '2.2.2.2:2222', '3.3.3.3:3333', '4.4.4.4:4444', '5.5.5.5:5555']}

请建议。

标签: pythonpython-3.xstringrepr

解决方案


print正在显示字典的表示,就像print(repr(test_dict))被调用一样。

[返回] 包含对象的可打印表示repr的字符串。对于许多类型,此函数尝试返回一个字符串,该字符串在传递给..时会产生具有相同值的对象。eval()

由于该值是一个包含 a 的字符串,因此 在表示字符串'期间使用 a"代替。例子:

print(repr("helloworld"))   # -> 'helloworld'
print(repr("hello'world"))  # -> "hello'world"

这种表示一般应仅用于诊断目的。如果需要编写这种特殊格式,则必须遍历字典并“按要求”显式打印值。

如果希望获得具有明确定义的序列化规则的可靠输出/编码,请使用 JSON、XML、YAML 等通用格式。


推荐阅读