如何对字典进行排序并在python中获取一串键?

时间:2014-10-07 16:32:56

标签: python dictionary

我有一个包含4个字母的句子文件。我需要计算每个字母的出现次数,然后按字母出现次数对字母进行排序,然后将句子写入相应的文件。

例如,如果字母T的出现次数最多,那么ACG按顺序排列,我想将句子写入一个名为TACG的文件。

我知道如何读取和写入文件,并且我已经设法构建了一个包含每个字母并且它出现的字典,唯一要做的就是对字典进行排序并将名称输入到归档它。

在Python中执行此操作的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用str.joincollections.Counter在一条(短)行中执行此操作:

>>> from collections import Counter
>>> "".join([t[0] for t in Counter('TTTTAAACCG').most_common()])
'TACG'

请注意,根据most_common的文档:

  

具有相同计数的元素是任意排序的

答案 1 :(得分:0)

Counter答案很好,但您最初要求提供字典 - 所以这就是我的想法 -

在我看来,实现这一目标的最简单方法就是“#pythonic"并会这样:

# assuming `d` is your dictionary
order_as_string = ''.join([y[0] for y in sorted(d.iteritems(), key=lambda x: x[1], reverse=True)])

执行以下操作:

(1)sorted(d.iteritems(), key=lambda x: x[1], reverse=True) - 返回一个元组列表,每个元组的形式(键,值)都来自字典d,并按d中每个项的值排序。 reverse=True确保按降序排序。

(2)[y[0] for y in sorted...] - 对于(1)中的每个元组,抓住"键" part(该元组的0项)。从中生成一个列表。

(3)''.join(...) - 用空字符串连接list(2)中的所有项目,生成一个新字符串。

希望有所帮助!

答案 2 :(得分:0)

假设您已经在字符串变量's'

中找到了自己的文字
s = 'TACGAGAGCTAGGCAAGCTTGATGCTAGGAA'
letters = set(s)

我会计算每个字母出现在字符串中的次数,然后列出元组列表,格式为(letter, count)

l = [(letter, s.count(letter)) for letter in letters]

>>> l
[('C', 5), ('A', 10), ('T', 6), ('G', 10)]

然后只需按计数对列表进行排序。

>>> sorted(l, key = lambda i: i[1], reverse = True)
[('A', 10), ('G', 10), ('T', 6), ('C', 5)]

现在我们已经有了排序列表,只需迭代它就可以抓取字母和join

filename = ''.join(i[0] for i in sorted(l, key = lambda i: i[1], reverse = True))

>>> filename
'AGTC'