如何将unicoded dict转换为字符串

Dra*_*els 2 python type-conversion

我的问题如下.我们有dict,其所有键和值都是unicode,例如:

ab = {
    u'a': u'A',
    u'b': u'B',
    u'c': u'C',
}
Run Code Online (Sandbox Code Playgroud)

我想将其转换为字符串.当我这样做时显然:

str(ab)
Run Code Online (Sandbox Code Playgroud)

我会收到:

"{u'a': u'A', u'c': u'C', u'b': u'B'}"
Run Code Online (Sandbox Code Playgroud)

如果我做:

unicode(ab)
Run Code Online (Sandbox Code Playgroud)

我会收到:

u"{u'a': u'A', u'c': u'C', u'b': u'B'}"
Run Code Online (Sandbox Code Playgroud)

我的预期结果是:

"{'a': 'A', 'c': 'C', 'b': 'B'}"
Run Code Online (Sandbox Code Playgroud)

目前我发现,如果我执行json.dump,它会在每个键和值之前将其正确转换为字符串而不需要额外的"u",但它也会将True更改为true和其他javascript方言差异.

任何解决方法不同于在数据结构上递归迭代?

Gar*_*tty 8

不,您需要手动将每个项目转换为字符串,然后将字典串起来,并注意除非Unicode数据全部是ASCII,否则您可能会遇到问题.做出这个假设,你可以使用字典理解来使它更快更简洁:

print({str(key): str(value) for key, value in ab.items()})
{'a': 'A', 'c': 'C', 'b': 'B'}
Run Code Online (Sandbox Code Playgroud)

如果你使用的是2.7.3之前的Python版本,没有dict理解:

dict((str(key), str(value)) for key, value in ab.items())
Run Code Online (Sandbox Code Playgroud)