[精讚] [會員登入]
378

【Python3】11 - 字典(Dictionary)的使用範例

python3的幾個字典使用範例,改寫自他人perl的範例

分享此文連結 //n.sfs.tw/15429

分享連結 【Python3】11 - 字典(Dictionary)的使用範例@小編過路君子
(文章歡迎轉載,務必尊重版權註明連結來源)
2023-03-25 21:44:40 最後編修
2021-10-09 12:32:17 By 過路君子
 

大家好,這裡是翻譯了其他程式語言的小編過路君子

事實上還滿好玩的,看看其他的程式語言有哪些以前從來沒看過的語法,處處都有驚喜。

 

 

以下的文章內容基本上參考了這一篇 [PERL] 11- 雜湊的範例@新精讚,只是將其使用 perl的部分改用 python3來表達,而且已經向原作者取得改寫、再發佈許可。

所以找不到其他關於 python3其他編號的文章很正常,因為目前只有改寫這一篇,有興趣的人可以比對兩篇文章裡程式的寫法。

 

範例一、計算文字出現次數

計算一段字串中各字出現的次數,因為 python3本身是採 unicode編碼方式,所以不管是中文、英文乃至於日文 python3都可以輕鬆的處理完畢。

text = """石室詩士施氏,嗜獅,誓食十獅
施氏時時適市視獅
十時,適十獅適市
是時,適施氏適市
氏視是十獅,恃矢勢,使是十獅逝世
氏拾是十獅屍,適石室
石室濕,氏使侍拭石室
石室拭,氏始試食是十獅
食時,始識是十獅,實十石獅屍
試釋是事"""

word = {}
for x in text:
    if x in word.keys(): word[x] += 1
    else: word[x] = 1

for key, value in word.items(): print(f"{key}, {value}")
第 1~10行 先將我們等等需要分析的字串初始化完畢,此處使用了 python的 """格式,使用 """"所儲存的字串會連同 \n或 \t也一同儲存起來。
第 12行 初始化一個名為 word的空字典。
第 13~15行 依序開始尋訪 text裡的每一個文字(包括 \n),如果該單字已經是 word裡的其中一個鍵,則將其值遞增一;反之,將其添加進 word的鍵裡並且將其值初始化為一。
第 17行 尋訪統計完成的字典並且輸出其結果。

結果

石, 6
室, 5
詩, 1
士, 1
施, 3
氏, 7
,, 11
嗜, 1
獅, 10
誓, 1
食, 3
十, 9
<這個是換行,但你看不見>
時, 5
適, 6
市, 3
視, 2
是, 7
恃, 1
矢, 1
勢, 1
使, 2
逝, 1
世, 1
拾, 1
屍, 2
濕, 1
侍, 1
拭, 2
始, 2
試, 2
識, 1
實, 1
釋, 1
事, 1

這裡也可以發現 python3也會像 perl一樣會將換行(\n)也會算做是一個字元,python3同樣也可以依照出現的次數進行排序之類的。

對 python3來說不是很難的一件事情。

 

範例二、將DNA序列轉換成對應的胺基酸

這個範列在生物上可能會用到,把DNA的序列轉成對映的胺基酸,DNA的序列主要是由約TACG這四種鹼基三個三個排列組成約20種的胺基酸,我們拿到一串鹼基序列檔,要想辦法改為胺基酸序列。

鹼基序列檔有非常多種的形式,取其中一種較常見的型式作範例。以 python3空字典(dict)來創建、修改鍵(key)或值(value),可以處理未知長度以及內容的字串。

aminos = dict(
TCA = 'S',  TCC = 'S',  TCG = 'S',  TCT = 'S',  TTC = 'F',  TTT = 'F',  TTA = 'L',  TTG = 'L',
TAC = 'Y',  TAT = 'Y',  TAA = '_',  TAG = '_',  TGC = 'C',  TGT = 'C',  TGA = '_',  TGG = 'W',
CTA = 'L',  CTC = 'L',  CTG = 'L',  CTT = 'L',  CCA = 'P',  CCC = 'P',  CCG = 'P',  CCT = 'P',
CAC = 'H',  CAT = 'H',  CAA = 'Q',  CAG = 'Q',  CGA = 'R',  CGC = 'R',  CGG = 'R',  CGT = 'R',
ATA = 'I',  ATC = 'I',  ATT = 'I',  ATG = 'M',  ACA = 'T',  ACC = 'T',  ACG = 'T',  ACT = 'T',
AAC = 'N',  AAT = 'N',  AAA = 'K',  AAG = 'K',  AGC = 'S',  AGT = 'S',  AGA = 'R',  AGG = 'R',
GTA = 'V',  GTC = 'V',  GTG = 'V',  GTT = 'V',  GCA = 'A',  GCC = 'A',  GCG = 'A',  GCT = 'A',
GAC = 'D',  GAT = 'D',  GAA = 'E',  GAG = 'E',  GGA = 'G',  GGC = 'G',  GGG = 'G',  GGT = 'G'
)

DNA="""1 TTGATTACCT TATTTGATCA TTACACATTG TACGCTTGTG TCAAAATATC ACATGTGCCT
       61 TATAAATGTG TACAACTATT AGTTATCCAT AAAAATTAAA AATTAAAAAA TCCGTAAAAT
      121 GGTTTAAGCA TTCAGCAGTG CTGATCTTTC TTAAATTATT TTTCTAATTT TGGAAAGAAA
      181 GCACAAAATC TTTGAATTCA CAATTGCTTA AAGACTGAGG TTAACTTGCC AGTGGCAGGC
      241 TTGAGAGATG AGAGAACTAA CGTCAGAGGA TAGATGGTTT CTTGTACAAA TAACACCCCC
      301 TTATGTATTG TTCTCCACCA CCCCCGCCCA AAAAGCTACT CGACCTATGA AACAAATCAC
      361 ACTATGAGCA CAGATAACCC CAGGCTTCAG GTCTGTAATC TGACTGTGGC CATCGGCAAC
      421 CAGAAATGAG TTTCTTTCTA ATCAGTCTTG CATCAGTCTC CAGTCATTCA TATAAAGGAG
      481 CCCGGGGATG GGAGGATTCG CATTGCTCTT CAGCACCAGG GTTCTGGACA GCGCCCCAAG
      541 CAGGCAGCTG ATCGCACGCC GCTTCCTCTC AATCTCCGCC AGCGCTGCTA CTGCCCCTCT
      601 AGTACCCCCT GCTGCAGAGA AAGAATATTA CACCGGGATC CATGCAGCCA GCAATGATGA
      661 TGTTTTCCAG TAAATACTGG GCACGGAGAG GGTTTTCCCT GGATTCAGCA GTGCCCGAAG
      721 AGCATCAGCT ACTTGGCAGC TCAC"""

dna = []
for x in DNA.split(' '):
    if not x.isdigit() and x != '': dna.append(x);
dna = "".join(dna).replace('\n', '')

for x in range(0, len(dna), 3):
    try: print(aminos[dna[x:x+3]],end="")
    except: raise Exception(f"不正確的序列在位置 {dna[x]}: {x}")
第 1~10行 使用 dict()初始化字典,將「鍵 = 值」依序排列即可。
第 12~24行 儲存在 DNA變數裡的鹼基字串,最左邊的數字是字元位置,FASTA格式[1]
第 26行 創建一個名為 dna的空陣列。
第 27~28行 以 for迴圈去尋訪一個「DNA字串以空格做分割而成的陣列」,如果其內容不是數字或是空格,則添加到 dna陣列裡面。
第 29行 將陣列內容串接成字串,並且將 \n給刪去。
第 31~33行 將 dna字串以三個三個字母做比對並輸出結果,如果其中格式有錯誤(無效的DNA鹼基序),則拋出一個錯誤並立即結束程式。

結果

LITLFDHYTLYACVKISHVPYKCVQLLVIHKN_KLKNP_NGLSIQQC_SFLNYFSNFGKKAQNL_IHNCLKTEVNLPVAGLRDERTNVRG_MVSCTNNTPLCIVLHHPRPKSYSTYETNHTMSTDNPRLQVCNLTVAIGNQK_VSF_SVLHQSPVIHIKEPGDGRIRIALQHQGSGQRPKQAADRTPLPLNLRQRCYCPSSTPCCRERILHRDPCSQQ__CFPVNTGHGEGFPWIQQCPKSISYLAAH

 

以上兩個範例大致上就展示了 python3的強大分析能力,無論字串是什麼格式,只要在 unicode上有編碼,python3都可以處理,甚至連「表情符號」的統計都難不倒 python3喔!

 

參考資料

 

 

 

後記:

小編本身是不會寫 perl的,目前頂多到能看懂的程度而已,這篇也是在練習看懂 perl下的產物。

到現在才知道 perl是一個多麼自由的語言,型態甚至比 python3還要弱,真的是嚇死人,但是在處理字串上面感覺兩種語言都很方便,沒有像 C++那樣遇上字串處理(尤其是中文)般麻煩、棘手。

END

你可能感興趣的文章

【Discord bot 2.0.1】(discord.ui.View)如何將舊機器人升級至目前最新版本 很多時候升級軟體是為了讓別人覺得你的程式很先進,但這次卻是因為要使用某個新功能

【NodeMCU / ESP8266】[Arduino]測量溫溼度並上傳至ThinkSpeak 使用簡單的溫度計來測量溫濕度並上傳至第三方網站,這樣他人只要有瀏覽器就能看到我們的數據了

【Python3】11 - 字典(Dictionary)的使用範例 python3的幾個字典使用範例,改寫自他人perl的範例

【Linux】[CentOS 8]如何更新sudo指令 上次會想要更新sudo這個指令的時間應該是2017年了吧?轉眼間就2021了耶

【教程】[HTML](進階版)如何在手機上編輯電子書(epub)預覽介面 可能會有人認為電子書(epub)只能用電腦來開啟、編輯,其實不是的,手機也可以編輯喔!

【C++】class練習 — 檢測該字串是否為迴圈 第一次的C++結構式寫法,雖然以後應該會見怪不怪,但畢竟是第一次所以還是想保存下來

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[活動] 2017年4/1雲空幻想愚人節活動彩蛋&攻略 (紀念性質) 雲空幻想2017年的愚人節活動介紹同時也是本小編的第一篇網路文章(*^ω^)♪

高捷少女:小穹與果仁巧克力㊦ 「如果妳跟一個女生同班三年,看過她午休流口水跟狼吞虎嚥地吃午餐,就算變成高捷代言人,也很難把她當女神的啦!」她說,小穹氣得搶走她義大利麵裡的蝦子,其他人笑得花枝招展。

高捷少女:購票大作戰① 「各位乘客,本班機即將降落,感謝各位乘客的搭乘……」隨著空中小姐的廣播音,那架飛機逐漸降落在地面,裡面的乘客們也紛紛開始整理自己的行李。 那個有著歐美人五官的少女抓緊包包,看著外面的小港機場,臉上緩緩

【歌評】過去の花 過去的花 ~ Fairy of Flower 彼岸花(higan bana),就是歌曲名中所指的花,而彼岸花又有「地獄花jigoku bana」的別稱,請注意,蓮台野的周圍可是長滿彼岸花呢!

艾米莉亞和高捷戀旅③ 「妳最好給我一個完整的理由,告訴我妳為什麼要這麼做。」艾米雙手叉腰,看著這位冒名參賽的後輩。「我會根據妳的說詞來判定妳違反規定的懲處。」