我正在使用Python 2.7并试图插入一个值,这是一个浮点数到一个键。但是,所有的值都以0.0的形式插入。极性值被插入为0.0,而不是实际值。
代码片段:
from textblob import TextBlob
import json
with open('new-webmd-answer.json') as data_file:
data = json.load(data_file, strict=False)
data_new = {}
lst = []
for d in data:
string = d["answerContent"]
blob = TextBlob(string)
#print blob
#print blob.sentiment
#print d["questionId"]
data_new['questionId'] = d["questionId"]
data_new['answerMemberId'] = d["answerMemberId"]
string1 = str(blob.sentiment.polarity)
print string1
data_new['polarity'] = string1
#print blob.sentiment.polarity
lst.append((data_new))
json_data = json.dumps(lst)
#print json_data
with open('polarity.json', 'w') as outfile:
json.dump(json_data, outfile)
当前编写代码的方式是,每次迭代都覆盖字典。然后将该字典多次追加到列表中。
假设你的字典是dict = {"a" : 1}
然后你把它附加到一个列表
alist.append(dict)
alist
[{'a': 1}]
然后你改变dict的值,dict{"a" : 0}
并再次将其附加到列表alist.append(dict)
alist
[{'a': 0}, {'a': 0}]
这是因为字典是可变的。有关可变和不可变对象的更完整概述,请参阅此处的文档
要实现预期的输出,每次迭代data
lst = []
for d in data:
data_new = {} # makes a new dictionary with each iteration
string = d["answerContent"]
blob = TextBlob(string)
# print blob
# print blob.sentiment
# print d["questionId"]
data_new['questionId'] = d["questionId"]
data_new['answerMemberId'] = d["answerMemberId"]
string1 = str(blob.sentiment.polarity)
print string1
data_new['polarity'] = string1
# print blob.sentiment.polarity
lst.append((data_new))