簡體   English   中英

如何避免在打印出來的字典末尾打印逗號?

[英]How do I avoid a comma from being printed at the end of a dictionary being printed out?

我正在嘗試打印出字典(及其相應的鍵和值),但似乎無法弄清楚格式。

for key, value in dictionary.items():
    print(str(key) + ": " + "'" + str(value) + "'", end="")
    if counter > 1:
        print(", ", end="")

print("} ", end="")             

如您所見,我正在打印鍵,然后打印冒號,然后是單引號,然后是值,然后是另一個單冒號。 下一個if語句在那里,因此它可以在字典的每個元素之后打印逗號。 但是,它在最后一個元素之后輸出逗號。 如何避免這種情況?

尚不清楚為什么在str(dictionary)會執行類似的操作時為什么要這樣做,但是對於每個鍵和值都具有正確的repr (例如,不假裝非字符串值是字符串,包括遞歸處理下標和轉義)字符串中值的所有引號,依此類推),並且不會出現此問題。 如果想要更好的格式,則可以使用pprint (甚至,如果您的鍵和值是JSON兼容的,則可以使用json.dumps )。

但是有些類似的問題無法輕易避免,因此值得了解如何做到這一點。


通常,最好的答案是建立一個字符串列表或迭代器並將其join

pairs = []
for key, value in dictionary.items():
    pair.append(str(key) + ": " + "'" + str(value) + "'")
print(', '.join(pairs))

……或者,如果您希望簡潔起見:

print(', '.join(
    str(key) + ": " + "'" + str(value) + "'" for key, value in dictionary.items()))

當由於某種原因而無法執行此操作時(例如,由於有很多鍵可以將該列表存儲在內存中),您可以跟蹤集合的長度並顯式跳過最后一個:

for i, (key, value) in enumerate(dictionary.items()):
    print(str(key) + ": " + "'" + str(value) + "'", end="")
    if counter > 1 and i != len(dictionary)-1:
        print(", ", end="")

...但它通常是更好的移動,到前面,這樣你就可以跳過第一個,而不是最后一個,甚至發電機和其他iterables很好地工作,而不長度:

for i, (key, value) in enumerate(dictionary.items()):
    if counter > 1 and i > 0:
        print(", ", end="")
    print(str(key) + ": " + "'" + str(value) + "'", end="")

附帶說明一下,如果您必須將事物轉換為str以便連接它們,通常使用f字符串(或對於Python的早期版本為str.formatstr.format 例如,您可以重寫以下內容:

str(key) + ": " + "'" + str(value) + "'"

……為:

f"{key}: '{value}'"

…或者,對於Python 3.5或2.7:

"{}: '{}'".format(key, value)

我不確定為什么要使用循環。 您可以簡單地執行str(dictionary)並根據需要提供一個字符串。 如果您不喜歡大括號,只需按索引str(dictionary)[1:-1]將其刪除

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM