2017-10-14 93 views
1

我正在使用包含各種類型的犯罪的嵌套列表。爲了澄清,crimeDescription被格式化爲: [['Murder'], ['Assault'], ... , ['Stalking'], ['Rape']]。我正在創建一本字典,用於保存此列表中的每個價值/犯罪,並記錄其頻率或其出現頻率。由於字典內的鍵不能是列表,因此我試圖通過在for循環中調用其索引i [0]來訪問每個嵌套列表中的字符串。當我運行下面的程序:Python - 將嵌套列表轉換爲字典?

#TypesOfCrime --> a List containing all different types of crime that's happened in LA 

TypesOfCrime = [] 
CrimeFreq = {} 
for i in crimeDescription: 
    if i not in TypesOfCrime: 
     i = i[0] 
     CrimeFreq[i] = 1 
    elif i in TypesOfCrime: 
     i = i[0] 
     CrimeFreq[i] += 1 

我得到以下錯誤:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-75-a8698e79e96a> in <module>() 
     5  if i not in TypesOfCrime: 
     6   TypesOfCrime.append(i) 
----> 7   CrimeFreq[i[0]] = 1 
     8  elif i in TypesOfCrime: 
     9   CrimeFreq[i[0]] += 1 

TypeError: 'float' object is not subscriptable 

我在做什麼錯?我如何創建一個包含我的嵌套列表中的每個不同值的字典?任何建議都會有幫助。

+1

嗯,有沒有什麼好的理由你有一個單元素列表的列表?此外,該錯誤消息與示例代碼不一致。請提供[mcve] –

+0

@ juanpa.arrivillaga這就是我如何收到數據集。我很想用任何有用的方式改變內容,這就是我在if語句中試圖做的事情,但是得到這個TypeError ...有什麼想法? – user7366442

+0

什麼是'crimeDescription',它只是一個描述每個'TypesOfCrime'的字符串? – davedwards

回答

0

要計算使用的字典的東西,檢查鍵已經存在,然後遞增值,否則值爲1中添加鍵值:

crime_freq = {} 

for current_crime in crimeDescription: 
    crime = current_crime[0] 
    if crime in crime_freq: 
     crime_freq[crime] += 1 
    else: 
     crime_freq[crime] = 1 

現代的方式來解決你的問題是使用collections.Counter和一個生成器表達式:

crime_freq = collections.Counter(crime[0] for crime in crimeDescription) 
0

是否要如果鍵不存在,創建值或者如果鍵存在,則添加值。

我推薦使用setdefault()方法。

crime_freq = {} 

for current_crime in crimeDescription: 
    crime = current_crime[0] 
    crime_freq.setdefault(crime, 0) 
    crime_freq[crime] += 1 

如果使用setdefault()方法,則代碼很簡單。

我通常經常使用setdefault()方法。