簡體   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