[英]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())
將字典聲明移到外面
您在循環的迭代中聲明每個; 這就是為什么您總是可以看到最后插入的密鑰。
我不知道這是否是一個值得贊賞的建議,但我不會將key
和count
定義為...鍵和值,我只會使用搜索到的 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.