[精讚] [會員登入]
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

你可能感興趣的文章

【Maven / Jython】建立可直接執行的JAR檔案 以小編的前一篇文章為基礎,加了一些新東西進去,就變成另一個樣貌了

【JDA/discord bot】package does not exist fix JDA 4.0 和 5.0 差別還是很大的

【Wickct】(link) <a> 如何新增超連結 簡單來說有兩種方式,小編個人比較偏好 的方法

【JSON In Java】如何快速產生JSON 身為三十年老程式語言,當然對Json有不錯的支援,那究竟該如何使用呢

【自製-製作epub輔助工具】(Sigil) content產生器 能交給程式快速結束的地方就不要自己手動浪費時間了吧。

【Kali Linux】[history -c]如何清除歷史記錄 非bash環境會使history部分功能變的非法

我有話要說

>>

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

訪客留言

[無留言]

隨機好文

【手遊介紹】小品手遊─寶箱是我的!(SUMMONER'S GREED) 輕鬆無腦的塔防遊戲,殺時間本小編推薦的遊戲之一

【分享、整合串】什麼?!高捷少女竟然有二創小說!! 由時零宇宙大大在巴哈上面連載的二創高捷少女小說,就讓我們來看看,究竟在時零大大的巧手下,高捷少女們會擦出什麼樣的火花吧!

高捷少女:地下城的探險少女① 婕兒心中一奇,便走上前看著仔細。那塊凹進去的地方中心大約三公分厚,越往邊緣就越淺,圓型直徑十五公分。婕兒拿出銅盤對比一下,發現兩者大小竟然一致,銅盤似乎能夠完整的嵌進去。     婕兒看著凹槽,心中

高捷少女:美麗島的守護者② 這是在亦晨離開前的下午拍的,當時亦晨在美麗島跟小穹艾米等人在美麗島散步,為離開前補充一些回憶,這時剛好經過的小雅被艾米抓過來,做為同樣是高捷新人的她倆一同拍了一張紀念照。說起來她跟亦晨並不太熟,不過也

高捷少女:美麗島的守護者④ 光之穹頂的某處垃圾桶底,一個四方形的機器持續發出聲音,機器的儀表板上顯示著「1:25:10」的字樣,外表被一層鞭炮所掩蓋。儀表板的數字每秒不斷減少,細微的嗶嗶聲也隨著數字的改變發出,但在熙來攘往的美麗