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

时间:2018-06-02 02:06:08

标签: python

我试图打印出一本字典(带有相应的键和值),但似乎无法弄清楚格式。

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

print("} ", end="")             

正如您所看到的,我打印出密钥,然后是冒号,后跟单引号,后跟值,另一个冒号。下一个if语句就是这样,它可以在字典的每个元素后面打印一个逗号。但是,它会在最后一个元素后打印出逗号。我该如何避免这种情况?

2 个答案:

答案 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)

删除它们即可