簡體   English   中英

當我 go 通過 Python 中的循環時,只剩下最后一個鍵/值對添加到字典

[英]Only left with the last key/value pairs added to a dictionary when I go through a loop in Python

使用 Python 3 我正在嘗試獲取名稱字典和一個長字符串中某些字符串的出現次數。

我坐在這里拔頭發,因為這不應該很復雜,但我已經閱讀了很多答案,但我仍然沒有得到它。 我已經 5 個小時了,現在絕對看不到樹木的樹木。

希望有人能告訴我哪里出錯了。

該字符串稱為seq

seq = 'AAGGTAAGTTTAGAATATAAAAGGTGAGTTAAATAGAATAGGTTAAAATTAAAGGAGATCAGATCAGATCAGATCTATCTATCTATCTATCTATCAGAAAAGAGTAAATAGTTAAAGAGTAAGATATTGAATTAATGGAAAATATTGTTGGGGAAAGGAGGGATAGAAGG'

我有一個 CSV 我正在尋找的單詞,它在一個名為nu的列表中

nu = ['AGATC', 'AATG', 'TATC']

代碼應該使用 nu 中的每個單詞並計算seq中出現的次數。

這是我的循環

for i in nu:
    searchstr = {}
    # Line returns a dict of the last value added
    searchstr = dict(key = (i), count = (seq.count(i)))
    print(searchstr)

print(searchstr.keys())
print(searchstr.values())

和 output 所以我知道我將計數與鍵正確匹配:

{'key': 'AGATC', 'count': 4}
{'key': 'AATG', 'count': 1}
{'key': 'TATC', 'count': 5}
dict_keys(['key', 'count'])
dict_values(['TATC', 5])

我一生都無法將三個字典合二為一。 我只剩下一個 ['TATC', 5] 的字典,因為它已經覆蓋了列表中的前一個。

我對此仍然很陌生,但一直在努力學習。

您所需要的只是將元素分配給字典,而不是每次都創建一個新字典:

searchstr = {}
for i in nu:
    searchstr[i] = seq.count(i)
print(searchstr)

我認為這就是你想要的:

searchstr = {}
for i in nu:
    # Line returns a dict of the last value added
    searchstr[i] = seq.count(i)
print(searchstr)
searchstr = {}
for i in nu:
    # Line returns a dict of the last value added
    # Earlier the dictionary declaration was here which was overriding the previous value
    searchstr = dict(key = (i), count = (seq.count(i)))
    print(searchstr)

print(searchstr.keys())
print(searchstr.values())

將字典聲明移到外面

您在循環的迭代中聲明每個; 這就是為什么您總是可以看到最后插入的密鑰。

我不知道這是否是一個值得贊賞的建議,但我不會將keycount定義為...鍵和值,我只會使用搜索到的 DNA 序列作為鍵。 像這樣的東西:

searchstr = dict()
for i in nu:
    searchstr[i] = seq.count(i)
    
print(searchstr.keys())
print(searchstr.values())
print(searchstr)

print(searchstr['AATG']) #reading a specific result

Output:

dict_keys(['AGATC', 'AATG', 'TATC'])
dict_values ([4, 1, 5])
{'AGATC': 4, 'AATG': 1, 'TATC': 5}
1

如您所見,字典只需要在循環外聲明,並且在循環中您將為每個搜索到的字符串添加一個元素。

請注意如何更容易訪問特定的序列計數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM