2016-11-11 8 views
-1

Ich arbeite mit Python 2.7 und versuche, einen Wert einzufügen, der ein float zu einem Schlüssel ist. Alle Werte werden jedoch als 0.0 eingefügt. Der Polaritätswert wird als 0.0 und nicht als tatsächlicher Wert eingefügt.Python 2.7-Wörterbuchwert, der float nicht als Eingabe verwendet

Code Snippet:

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) 
+0

wenn Sie Zeichenfolge1 gedruckt Sie die erwartete Ausgabe sehen? Es sieht auch so aus, als ob Sie die Schlüssel im Wörterbuch bei jeder Iteration von 'd in data' überschreiben. – user2682863

+0

@ user2682863 ja, wenn ich string1 drucke, sehe ich die erwartete Ausgabe. Ja, ich überschreibe die Schlüssel. Bevor ich überschreibe, füge ich auch die Liste hinzu. –

+0

Hat meine Antwort Ihr Problem gelöst? – user2682863

Antwort

0

Die Art und Weise Ihren Code zur Zeit geschrieben wird, sind Sie das Wörterbuch mit jeder Iteration zu überschreiben. Dann fügen Sie das Wörterbuch mehrmals der Liste hinzu.

lässt Ihr Wörterbuch sagen war dict = {"a" : 1} und dann, dass Sie anhängen, um eine Liste

alist.append(dict) 

alist 

[{ 'a': 1}]

Dann ändern Sie den Wert von dict, dict{"a" : 0} und hängen Sie es an die Liste wieder alist.append(dict)

alist

[{ 'a': 0}, { 'a': 0}]

Dies geschieht, weil Wörterbücher sind veränderlich. Für eine komplette Übersicht über wandelbar vs unmutable Objekte sehen Sie die Dokumentation here

Um die erwartete Ausgabe zu erreichen, machen ein neues Wörterbuch mit jeder Iteration von 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)) 
Verwandte Themen