簡體   English   中英

Python:將單個元素打印為字符串並在列表中有多個元素時打印列表

[英]Python: Printing a single element as a string and printing a list when there are multiple elements in list

我有以下字典(其中計數(值)反向排序):

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

如您所見,有 2 個鍵具有相同的值,即。 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)

我想這就是你要找的。

暫無
暫無

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

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