您好我有一個關于遍歷串列并將串列中的專案及其頻率添加到字典的問題。
i = ['apple','pear','red','apple','red','red','pear','pear','pear']
d = {x:i.count(x) for x in i}
print (d)
產出
{'pear': 4, 'apple': 2, 'red': 3}
然而
i = ['apple','pear','red','apple','red','red','pear', 'pear', 'pear']
d = {}
for x in i:
d={x:i.count(x)}
print(d)
產出
{'pear': 4}
我需要遍歷串列,同時將字典中的每個迭代添加到新串列中。但是我不明白為什么兩個不同的代碼會給出不同的結果。
看到 count 函式在第二個函式上起作用是令人鼓舞的。但是我對蘋果和紅色消失的地方感到困惑。
很抱歉措辭不當等等,這幾個小時一直在作業,這讓我發瘋。非常感謝您抽出時間提供幫助
我對為什么這兩個結果不同感到困惑
uj5u.com熱心網友回復:
問題是你必須key:value在第二個回圈中添加對而不是d用每個回圈覆寫。
i = ['apple','pear','red','apple','red','red','pear','pear','pear']
d = {}
for x in i:
d[x] = i.count(x)
print(d)
將輸出與您的第一個函式相同的結果。
{'pear': 4, 'apple': 2, 'red': 3}
基本上在你的第二個例子中,當你d={x:i.count(x)}有一個單元素字典時,你會在每個回圈中覆寫它。然后它只顯示pear: 4因為pear是i串列中的最后一個元素。
uj5u.com熱心網友回復:
i = ['apple','pear','red','apple','red','red','pear', 'pear', 'pear']
d = {}
log = []
for x in i:
log.append({x:i.count(x)})
log是
[{'apple': 2},
{'pear': 4},
{'red': 3},
{'apple': 2},
{'red': 3},
{'red': 3},
{'pear': 4},
{'pear': 4},
{'pear': 4}]
uj5u.com熱心網友回復:
我剛剛運行了你的第一段代碼,它給了我
{'apple': 2, 'pear': 4, 'red': 3}
這是正確的,但與您在問題中所說的不同。
為了解決你的第二位代碼,你在回圈的每次迭代中執行賦值操作,所以d每次訪問新專案時都會重寫的值i
我個人建議使用 Counter 來解決這個問題:
>>> from collections import Counter
>>> z = ['blue', 'red', 'blue', 'yellow', 'blue', 'red']
>>> Counter(z)
Counter({'blue': 3, 'red': 2, 'yellow': 1})
uj5u.com熱心網友回復:
varLs = ['apple','pear','red','apple','red','red','pear','pear','pear']
def frequency(varLs):
counters = {}
for item in varLs:
if item not in counters:
counters[item] = 1
else:
counters[item] = 1
return counters
print(frequency(varLs))
回傳 {'apple': 2, 'pear': 4, 'red': 3}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/536602.html
