我使用的嵌套列表包含各种类型的犯罪。为了澄清,crimeDescription
的格式如下:
[['Murder'], ['Assault'], ... , ['Stalking'], ['Rape']]
。我希望创建一个字典,它将保存此列表中的每个值/犯罪并记录其频率,或者它在数据集中出现的频率。由于字典中的键不能是列表,我试图通过在for循环中调用其索引i [0]来访问每个嵌套列表中的字符串。当我运行以下程序时:
#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
我做错了什么?如何创建包含嵌套列表中每个不同值的字典?任何建议都会有所帮助。
答案 0 :(得分:0)
要使用dict计算某些内容,请检查该键是否已存在,然后递增该值,否则添加值为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)
答案 1 :(得分:0)
你想要钥匙不存在,创造价值或钥匙存在,增值。
我推荐使用setdefault()方法。
crime_freq = {}
for current_crime in crimeDescription:
crime = current_crime[0]
crime_freq.setdefault(crime, 0)
crime_freq[crime] += 1
如果使用setdefault()方法,代码很简单。
我经常经常使用setdefault()方法。