[英]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.format
) str.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.