当前位置:  开发笔记 > 编程语言 > 正文

如何编写一个带字符串的函数并按频率递减的顺序打印字母?

如何解决《如何编写一个带字符串的函数并按频率递减的顺序打印字母?》经验,为你挑选了2个好方法。

我到目前为止:

def most_frequent(string):
    d = dict()
    for key in string:
        if key not in d:
            d[key] = 1
        else:
            d[key] += 1
    return d

print most_frequent('aabbbc')

返回:

{'a': 2, 'c': 1, 'b': 3}

现在我需要:

    扭转这一对

    按降序排序

    只打印出来的字母

我应该将此字典转换为元组还是列表?



1> chills42..:

这是一个单行答案

sortedLetters = sorted(d.iteritems(), key=lambda (k,v): (v,k))



2> Jerub..:

这应该做得很好.

def frequency_analysis(string):
    d = dict()
    for key in string:
        d[key] = d.get(key, 0) + 1
    return d

def letters_in_order_of_frequency(string):
    frequencies = frequency_analysis(string)
    # frequencies is of bounded size because number of letters is bounded by the dictionary, not the input size 
    frequency_list = [(freq, letter) for (letter, freq) in frequencies.iteritems()]
    frequency_list.sort(reverse=True)
    return [letter for freq, letter in frequency_list]

string = 'aabbbc'
print letters_in_order_of_frequency(string)

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有