Python:将单个元素打印为字符串,当列表中有多个元素时打印列表



我有以下字典(其中计数(值(按相反顺序排列(:

sorted_dict={'A': 4, 'W': 4, 'T': 2, 'S': 2, 'I': 2, 'R': 1}

正如你所看到的,有两个键具有相同的值,即A和W。

我已经编写了以下逻辑以获得最大计数

max_count = list(sorted_dict.values())[0]
max_count_letter_list = []

在遍历字典中的每个键之后,我将计数最大的字母添加到列表中。

for letter in sorted_dict:
if sorted_dict[letter] == max_count:
max_count_letter_list.append(letter) 

当打印到控制台时,它被打印成一个列表,这就是我所期望的

print("Most frequent letter "{}" appears {} times"
.format(max_count_letter_list, max_count))
Output: Most frequent letter "['W', 'A']" appears 4 times

然而,如果我在列表中有一个元素,它会像这样打印出来:

Most frequent letter "['A']" appears 4 times

我的期望是这样打印:Most frequent letter "A" appears 4 times

问题:在单行打印语句中,如何只打印列表中没有括号的单个元素?如果它是列表,它应该打印元素列表。我需要写一个if语句吗?或者有更好的方法吗?

适合所有人的解决方案可以是用逗号连接项目

print("Most frequent letter "{}" appears {} times".format(",".join(max_count_letter_list), max_count))
# Giving
Most frequent letter "A,W" appears 4 times
Most frequent letter "A" appears 4 times

如果你想以不同的方式处理它们,你需要一个条件来区分这些情况:一个if,然后正常写入或使用内联模式

# inline
print("Most frequent letter "{}" appears {} times".format(letter_list[0] if len(letter_list) == 1 else letter_list, max_count))
# multi-line
if len(letter_list) == 1:
print("Most frequent letter "{}" appears {} times".format(letter_list[0], max_count))
else:
print("Most frequent letter "{}" appears {} times".format(letter_list, max_count))

缩短前代码的解决方案

from itertools import groupby
from operator import itemgetter
g = groupby(sorted_dict.items(), key=itemgetter(1))
max_count, letter_list = next((count, [x[0] for x in vals]) for count, vals in g)

我想这就是你所想的。。。根据列表中的项目数量打印不同的条件:

max_count_letter_list = ['A', 'W']
max_count = 4
print("Most frequent letter "{}" appears {} times".format(max_count_letter_list[0] if len(max_count_letter_list) == 1 else max_count_letter_list, max_count))
max_count_letter_list = ['A']
print("Most frequent letter "{}" appears {} times".format(max_count_letter_list[0] if len(max_count_letter_list) == 1 else max_count_letter_list, max_count))

结果:

Most frequent letter "['A', 'W']" appears 4 times
Most frequent letter "A" appears 4 times
print("Most frequent letter "{}" appears {} times"
.format((max_count_letter_list[0] if len(max_count_letter_list) ==1 else max_count_letter_list), 
max_count)

我想这就是你想要的。

最新更新