按值顺序打印,或者如果值相同,则按字母顺序排列

时间:2015-04-09 00:49:32

标签: python python-2.7

我正在尝试制作'元音计数器',但我希望它能满足以下条件。

按照最大值到最低值的顺序打印字母,后跟值。 但如果两个值相同,则按字母顺序打印它们。

这是我的代码,有两种方法可以按顺序获取值。问题是,'我'总是在'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

有关如何正确打印出来的任何想法都将非常感激。

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