python 创建嵌套字典计数器问题
python creating nested dictionary counter issue
我正在研究单词出现与响应变量之间的相关性。为此,我正在尝试创建具有以下结构的字典:
{word_1:{response_value:word_1_occurrence_with_same_response_value},
word_2:{response_value:word_2_occurrence_with_same_response_value}...}
一切看起来都正常,除了我的代码的最后一行。
下面是一些数据示例:
data = pd.DataFrame({
'message': ['Weather update', 'the Hurricane is over',
'Checking the weather', 'beautiful weather'],
'label': [0, 1, 0, 1]
})
和我的代码:
word_count = {}
for idx,msg in enumerate(data['message']):
msg = msg.lower()
label = data['label'][idx]
for word in msg.split():
word_count[word]={}
word_count[word][label]=word_count.get(word,0)+1
我收到以下错误:
TypeError Traceback (most recent call last)
<ipython-input-72-b195c90ef226> in <module>
6 for word in msg.split():
7 word_count[word]={}
----> 8 word_count[word][label]=word_count.get(word,0)+1
TypeError: unsupported operand type(s) for +: 'dict' and 'int'
我试图获得的输出如下
{'weather': {0: 2}, 'update': {0: 1},'the': {1: 1},'hurricane': {1: 1},
'is':{1:1},'over':{1:1}, 'checking':{0:1},'the':{0:1},'weather':{1:1},
'beautiful':{1:1}}
我尝试了各种解决方案,但我无法让计数器工作,只能为键赋值。
我也只在这里找到 posts 关于从一个已经存在的嵌套字典中计数,而这里是相反的,但是,如果我错过了它,请指导我到适当的 post。
谢谢
无法在 python 中获得您想要的输出,因为字典中的同一个键不能有两个不同的值。键必须是唯一的。这是我想出的:
data = pd.DataFrame({
'message': ['Weather update', 'the Hurricane is over',
'Checking the weather', 'beautiful weather'],
'label': [0, 1, 0, 1]
})
word_count = {}
for idx,msg in enumerate(data['message']):
msg = msg.lower()
label = data['label'][idx]
for word in msg.split():
word_count[word][label] = word_count.setdefault(word, {}).setdefault(label, 0)+1
print(word_count)
输出:
{'weather': {0: 2, 1: 1}, 'update': {0: 1}, 'the': {1: 1, 0: 1}, 'hurricane': {1: 1}, 'is': {1: 1}, 'over': {1: 1}, 'checking': {0: 1}, 'beautiful': {1: 1}}
我正在研究单词出现与响应变量之间的相关性。为此,我正在尝试创建具有以下结构的字典:
{word_1:{response_value:word_1_occurrence_with_same_response_value},
word_2:{response_value:word_2_occurrence_with_same_response_value}...}
一切看起来都正常,除了我的代码的最后一行。
下面是一些数据示例:
data = pd.DataFrame({
'message': ['Weather update', 'the Hurricane is over',
'Checking the weather', 'beautiful weather'],
'label': [0, 1, 0, 1]
})
和我的代码:
word_count = {}
for idx,msg in enumerate(data['message']):
msg = msg.lower()
label = data['label'][idx]
for word in msg.split():
word_count[word]={}
word_count[word][label]=word_count.get(word,0)+1
我收到以下错误:
TypeError Traceback (most recent call last)
<ipython-input-72-b195c90ef226> in <module>
6 for word in msg.split():
7 word_count[word]={}
----> 8 word_count[word][label]=word_count.get(word,0)+1
TypeError: unsupported operand type(s) for +: 'dict' and 'int'
我试图获得的输出如下
{'weather': {0: 2}, 'update': {0: 1},'the': {1: 1},'hurricane': {1: 1},
'is':{1:1},'over':{1:1}, 'checking':{0:1},'the':{0:1},'weather':{1:1},
'beautiful':{1:1}}
我尝试了各种解决方案,但我无法让计数器工作,只能为键赋值。
我也只在这里找到 posts 关于从一个已经存在的嵌套字典中计数,而这里是相反的,但是,如果我错过了它,请指导我到适当的 post。
谢谢
无法在 python 中获得您想要的输出,因为字典中的同一个键不能有两个不同的值。键必须是唯一的。这是我想出的:
data = pd.DataFrame({
'message': ['Weather update', 'the Hurricane is over',
'Checking the weather', 'beautiful weather'],
'label': [0, 1, 0, 1]
})
word_count = {}
for idx,msg in enumerate(data['message']):
msg = msg.lower()
label = data['label'][idx]
for word in msg.split():
word_count[word][label] = word_count.setdefault(word, {}).setdefault(label, 0)+1
print(word_count)
输出:
{'weather': {0: 2, 1: 1}, 'update': {0: 1}, 'the': {1: 1, 0: 1}, 'hurricane': {1: 1}, 'is': {1: 1}, 'over': {1: 1}, 'checking': {0: 1}, 'beautiful': {1: 1}}