我试图打印出一本字典(带有相应的键和值),但似乎无法弄清楚格式。
for key, value in dictionary.items():
print(str(key) + ": " + "'" + str(value) + "'", end="")
if counter > 1:
print(", ", end="")
print("} ", end="")
正如您所看到的,我打印出密钥,然后是冒号,后跟单引号,后跟值,另一个冒号。下一个if语句就是这样,它可以在字典的每个元素后面打印一个逗号。但是,它会在最后一个元素后打印出逗号。我该如何避免这种情况?
答案 0 :(得分:1)
当str(dictionary)
执行类似操作时,为什么要执行此操作尚不清楚,但每个键和值都使用正确的repr
(例如,不假装非字符串值是字符串,包括递归处理subdicts,并转义值为字符串的任何引号,等等,没有这个问题。如果您想要更好的格式化,可以使用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()))
如果由于某种原因无法做到这一点(例如,因为有很多键可以将该列表存储在内存中),您可以跟踪集合的长度并明确跳过最后一个:< / p>
for i, (key, value) in enumerate(dictionary.items()):
print(str(key) + ": " + "'" + str(value) + "'", end="")
if counter > 1 and i != len(dictionary)-1:
print(", ", end="")
...但通常最好将,
移到前面,这样你就可以跳过第一个而不是最后一个,即使对于没有长度的生成器和其他迭代也可以很好地工作:
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(key) + ": " + "'" + str(value) + "'"
...... as:
f"{key}: '{value}'"
...或者,对于Python 3.5或2.7:
"{}: '{}'".format(key, value)
答案 1 :(得分:0)
我不确定为什么要使用循环。您可以简单地执行include
,它会根据您的喜好为您提供字符串。如果您不喜欢大括号,只需按索引str(dictionary)