我在双引号中创建了一个字符串列表。我正在将列表解析为词典,其中词典被解析为 json文件。 json解码器无法读取单引号中列表中的字符串。
>>> number = ["one", "two"]
>>> mapper = {"numbers" : number}
实际输出:
>>> print mapper
{'numbers': ['one', 'two']}
期望的输出:
{'numbers': ["one", "two"]}
我正在使用Python 2.7。请给出解决方案。提前致谢
答案 0 :(得分:2)
你可以像这样使用json。
import json
print json.dumps(array)
答案 1 :(得分:2)
好。哇!这将是棘手的。
首先,如果要生成JSON,请使用JSON module。它会更加可靠,可以处理你还没有意识到的许多极端情况。
除此之外,你必须要理解的是,这种打印列表的技术,就像你正在做的那样,并不是真正用于生产输出。它为调试和教学(学习和教学)提供了便利。
当你用Python打印一个对象时,你会看到它的“表示”。在引擎盖下,Python调用对象类定义的 __repr__()
方法。这也是对象在解释器中“表示”的方式(在>>> 提示符下以交互方式使用Python时)。
因此,您可以采用一种方法来创建自己的Python list 类型的子类,并覆盖 __repr__()
方法
另一种方法是创建自己的功能(让我们称之为 print_list()
)以所需的格式打印列表。
这看起来像是:
#!python
def print_list(seq):
'''print a list in our preferred format'''
print '[%s]' % ', '.join(['"%s"' % x for x in seq])
在这种情况下,我们定义了一个将字符串插入字符串[...]的函数;并且通过用逗号后跟空格连接其他字符串序列来定义该字符串。通过迭代我们的参数(通过 seq 参数传递给我们的函数)并将每个字符串插入到一对双引号中来定义其他字符串序列。
请注意,此函数会将所有对象呈现为双引号字符串。这与内置的表示行为不匹配,后者仅在字符串周围放置引号(您反对的单引号)。用于Python列表的内置 __repr__
不会在数字,内置常量(如无和 True 和)周围添加引号错误等等。
具体来说,这种“插值”是通过Python使用另一种称为 __str__()
的特殊方法完成的。对于简单的数据类型,如字符串和数字,这几乎与您打印时看到的相同。例如,字符串或数字周围没有引号。
一般来说,依靠在生产输出格式中使用对象表示所暴露的这种实现细节是一个坏主意。
但关键是你必须理解数据如何输入你的代码(或解释器)之间的区别......这被称为“文字”形式,它是如何在某些类型的输出中表示的(调试,以及在解释器中),以及它是如何插值的。通常,字面形式,代表性和字符串(插值)形式将是相似的,甚至是相同的。有时不会。
在评论中解决问题的补遗:
上一个函数的变体,用于将结果作为字符串返回而不是打印它们:
#!python
def list_string(seq):
'''print a list in our preferred format'''
return '[%s]' % ', '.join(['"%s"' % x for x in seq])
# Usage example:
rendered = list_string([1, 2, 3, 10])
事实上,最好将函数渲染字符串编写为所需的格式,而不是从函数中调用 print 。一般情况下,最好尽可能使用高位(朝向__main__
套件)打印。如果您必须使您的程序适应模块以与webUI或GUI一起使用,或者使其适用于某些自定义网络连接或任何类型的任何东西,那么这将更容易。