给出一个字符串,您必须在其中找到前n
个最常见的字符。
如果有两个频率相同的字母,则应首先选择字母顺序更早的值:
string= "aabbccc"
n =2
list = []
#write your code here
char_dict = {}
for char in string:
if char not in char_dict:
char_dict[char] = 1
else:
char_dict[char] += 1
sorted_dict=sorted(char_dict.items(), key=lambda x: (x[1],x[0]))
sorted_dict = sorted_dict[-2:]
for key, value in sorted_dict:
list.append(key)
print(list)
我的输出是['b','c'],但实际上应该是c和a。
答案 0 :(得分:2)
问题在于排序。您需要按不同方向的两个字段进行排序(1个升序和1个降序)。将sorted_dict
2行更改为:
sorted_dict = sorted(char_dict.items(), key=lambda x: (-x[1], x[0]))
sorted_dict = sorted_dict[:n]
btw:避免将python
的关键字(例如list
)用作变量名。将其命名为myList
或类似名称。
答案 1 :(得分:2)
以下是针对您的问题的最佳解决方案之一(代码更少)
string=input()
n=int(input())
import collections
out=[collections.Counter(string).most_common(i+1)[i][0] for i in range(n)]
out.sort()
print(out)
答案 2 :(得分:0)
我在声明之后添加了打印输出。 该代码应为自描述代码。
from collections import defaultdict
string= "aabbccc"
n = 2
result = defaultdict(int)
for char in string:
result[char] += 1
print(result) # defaultdict(<class 'int'>, {'b': 2, 'a': 2, 'c': 3})
ordered_result = sorted(result.items(), key=lambda x: (-x[1], x[0]))
print(ordered_result) # [('c', 3), ('a', 2), ('b', 2)]
ordered_list = [x[0] for x in ordered_result]
print(ordered_list[:n]) # ['c', 'a']