我正在尝试制作'元音计数器',但我希望它能满足以下条件。
按照最大值到最低值的顺序打印字母,后跟值。 但如果两个值相同,则按字母顺序打印它们。
这是我的代码,有两种方法可以按顺序获取值。问题是,'我'总是在'e'之前打印,如果它们是相同的价值?除此之外,它不会打印'0'字母。
from collections import Counter
vowels = 'aeiou'
def vowel_counter(string):
count = Counter(letter for letter in string if letter in vowels)
return count
while True:
string = raw_input().lower()
if string == 'exit':
break
x = vowel_counter(string)
##This is a basic method to print all the vowels and their values
print "basic method: ",
for vowel in vowels:
print vowel + ":" + str(x[vowel]),
print
## This is the method using sort
sorter = [(value,key) for key,value in x.iteritems()]
sorter.sort(reverse=True)
print "sort method: ",
for a,b in sorter:
print "%s:%d" % (b,a),
print
以下是一些输入/输出示例
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Phasellus malesuada erat sed venenatis consequat.
exit
basic method: a:2 e:5 i:6 o:4 u:2
sort method: i:6 e:5 o:4 u:2 a:2
basic method: a:7 e:7 i:1 o:1 u:3
sort method: e:7 a:7 u:3 o:1 i:1
有关如何正确打印出来的任何想法都将非常感激。
答案 0 :(得分:0)
怎么样:
" ".join("{}:{}".format(v, x[v]) for v in sorted(vowels, key=x.get, reverse=True))
这会使用你想要的伪顺序vowels = "aeiou"
这个事实,然后对这个'字符串'进行排序。基于字典中的值x.get
。这为您提供了从词典中提取项目所需的关键顺序
如果您没有vowels
,则可以替换为sorted(x)
,即先按键排序,然后按值排序。
输出:
{'a':2, 'e':5, 'i':6, 'o':4, 'u':2} -> i:6 e:5 o:4 a:2 u:2
{'a':7, 'e':7, 'i':1, 'o':1, 'u':3} -> a:7 e:7 u:3 i:1 o:1