我有一個由4個字母組成的文件。我需要計算每個字母的出現次數,然後按出現次數對字母進行排序,然後將該句子寫入相應的文件。如何排序字典並獲取python中的鍵字符串?
例如,如果信T
具有最高發生數量,然後A
,C
,G
按訂單,我想這句話寫入到一個名爲TACG
文件。
我知道如何讀取和寫入文件,我已經設法建立一個包含每個字母和它的出現的字典,唯一剩下要做的就是對字典進行排序並獲取名稱該文件脫離它。
在Python中這樣做的最好方法是什麼?
我有一個由4個字母組成的文件。我需要計算每個字母的出現次數,然後按出現次數對字母進行排序,然後將該句子寫入相應的文件。如何排序字典並獲取python中的鍵字符串?
例如,如果信T
具有最高發生數量,然後A
,C
,G
按訂單,我想這句話寫入到一個名爲TACG
文件。
我知道如何讀取和寫入文件,我已經設法建立一個包含每個字母和它的出現的字典,唯一剩下要做的就是對字典進行排序並獲取名稱該文件脫離它。
在Python中這樣做的最好方法是什麼?
的Counter
答案是好的,但您最初要求的字典 - 所以這裏就是我認爲 -
在我看來,實現這一目標最簡單的方法是相當「Python的」,並會是這樣的:
# 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
返回的元組,每個形式的(鍵,值)的列表。 reverse=True
確保它按降序排列。 (2)[y[0] for y in sorted...]
- 對於(1)中的每個元組,抓住「key」部分(該元組的0項)。從中生成一個列表。
(3)''.join(...)
- 用空字符串加入列表(2)中的所有項目,生成一個新字符串。
希望有幫助!
你可以通過利用'sorted'已經返回一個'list'並避免list-comp和'lambda':'''.join(sorted(d,key = d.get,reverse = True)) - 這樣你就可以使用''d''自己的查找,而不是建立另一個'list'並且不保存這些項目作爲排序的一部分(本身) – 2014-10-07 17:54:52
'Counter' *是一個字典子類'dict',引擎蓋下) - 嘗試'isinstance(Counter(),dict)'。 – jonrsharpe 2014-10-07 19:50:43
比方說,你已經有你的文字,字符串變量'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'
您可以在一個(短)符合str.join
和collections.Counter
做到這一點:
>>> from collections import Counter
>>> "".join([t[0] for t in Counter('TTTTAAACCG').most_common()])
'TACG'
需要注意的是,每對most_common
的文檔:
元素進行排序任意地
我有:'''.join(k代表k,v代表Counter(s).most_common())':p – 2014-10-07 16:42:35
請張貼您的代碼,所以我們可以解決你現有的問題。 – wwii 2014-10-07 16:36:01
你是什麼意思*「排序詞典」*?字典*無序*。你應該看看['collections.Counter'](https://docs.python.org/2/library/collections.html#collections.Counter),這是一個將爲你完成大部分工作的字典子類。 – jonrsharpe 2014-10-07 16:37:57