Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将未编码的dict转换为字符串_Python_Type Conversion - Fatal编程技术网

Python 如何将未编码的dict转换为字符串

Python 如何将未编码的dict转换为字符串,python,type-conversion,Python,Type Conversion,我的问题如下。我们有一个dict,它的所有键和值都是unicode,例如: ab = { u'a': u'A', u'b': u'B', u'c': u'C', } 我想把它转换成一个字符串。显然,当我这样做的时候: str(ab) 我将收到: "{u'a': u'A', u'c': u'C', u'b': u'B'}" u"{u'a': u'A', u'c': u'C', u'b': u'B'}" 如果我这样做: unicode(ab) 我将收到: "{u'a

我的问题如下。我们有一个dict,它的所有键和值都是unicode,例如:

ab = {
    u'a': u'A',
    u'b': u'B',
    u'c': u'C',
}
我想把它转换成一个字符串。显然,当我这样做的时候:

str(ab)
我将收到:

"{u'a': u'A', u'c': u'C', u'b': u'B'}"
u"{u'a': u'A', u'c': u'C', u'b': u'B'}"
如果我这样做:

unicode(ab)
我将收到:

"{u'a': u'A', u'c': u'C', u'b': u'B'}"
u"{u'a': u'A', u'c': u'C', u'b': u'B'}"
我的预期结果是:

"{'a': 'A', 'c': 'C', 'b': 'B'}"
目前我发现,如果我执行json.dumps,它将正确地将其转换为字符串,在每个键和值之前不需要额外的“u”,但它也会将True转换为True和其他javascript方言差异


除了在我的数据结构上递归迭代之外,还有其他解决方法吗?

否,您需要手动将每个项目转换为字符串,然后将dict字符串化,请注意,除非Unicode数据恰好都是ASCII,否则您可能会遇到问题。做出这样的假设后,你可以使用听写理解使其更快、更简洁:

print({str(key): str(value) for key, value in ab.items()})
{'a': 'A', 'c': 'C', 'b': 'B'}
如果您使用的是2.7.3之前的Python版本,没有dict理解:

dict((str(key), str(value)) for key, value in ab.items())

如果您使用的是python 2.x:

dict( map(str, item) for item in ab.iteritems() )

使用这种字符串表示法,您想实现什么?我同意,这里的目标对于实现这一点的最佳方式(或不实现)可能非常重要。遗留代码,它只是假设我们在数据库中有可以解码的字符串化数据结构retrieval@Drachenfels如果你能改变,那么为了你自己,这样做。从数据库和代码的角度来看,这是一个糟糕的想法。我很清楚,最近我们升级了django版本,所有字段都是unicode,所以我们的字典是unicode编码的,我们的代码将dict转换为字符串,unicode dict意味着我们已经完全破坏了数据库中的数据。最后,这是一个巨大的失败,我对此无能为力。OP解释了他们为什么不想使用JSON。@SvenMarnach,但他没有解释他们将使用数据做什么,以及为什么将其作为Python文本保存很重要。在大多数情况下,从JSON编码/解码是一个更好的主意。正如注释中进一步解释的问题,我删除了关于JSON的注释-无论如何,在这种情况下使用JSON几乎同样糟糕。与其使用
str(x)
,不如使用
x.encode('utf-8')
以保留任何非ASCII Unicode字符。@MarkRansom这是正确的,尽管这可能不是询问者想要的。我一直坚持提问者在问题中所说的。为什么这是2.x独有的?将3.x的调用从
iteritems()
更改为
items()
非常简单。@Lattyware:最好在3.x中使用字典理解。2.7.3中存在字典理解。