繁体   English   中英

在双引号内打印列表中的字符串

[英]To print the strings in list inside double quotes

我正在创建一个双引号内的字符串列表。 我正在将列表解析为字典,其中字典被解析为json 文件 json 解码器无法读取单引号内列表中的字符串。

>>> number = ["one", "two"]
>>> mapper = {"numbers" : number}

实际输出:

>>> print mapper
{'numbers': ['one', 'two']}

期望的输出:

{'numbers': ["one", "two"]}

我正在使用 Python 2.7。 请给出解决方案。 提前致谢

你可以像这样使用json。

import json
print json.dumps(array)

好的。 哇! 这会很棘手。

首先,如果您想生成 JSON,请使用JSON 模块 它会更加可靠,并且可以处理您尚未意识到的许多极端情况。

除此之外,您必须了解的是,这种打印列表的技术,就像您正在做的那样,并不是真正用于生产输出。 它为调试和教学(学习和教学)提供了便利。

当您在 Python 中打印一个对象时,您会看到它的“表示”。 __repr__() Python 调用对象类定义的__repr__()方法。 这也是对象在解释器中“表示”的方式(在>>>提示符下以交互方式使用 Python 时)。

因此,您可以满足您的要求的一种方法是创建您自己的 Python列表类型的子类,并在其上__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__不会在数字、内置常量(如NoneTrueFalse等)周围加上引号。

具体来说,这种“插值”是通过 Python 使用另一种称为__str__()特殊方法在__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 的模块,或者使其通过某些自定义网络连接或任何类型的东西工作,那么这会变得更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM