Ich versuche, ein Wörterbuch zu durchlaufen und ein Wörterbuch darin anzuhängen. Aber wenn ich eine Schleife mit iteritems() verwende, wird sie nur einmal durchlaufen und zur äußeren Schleife zurückkehren. Ich bin ziemlich neu in Python, aber ich denke, dass dieser Code funktionieren sollte.Python: verschachtelte Iteritems-Schleife nur einmal ausgeführt
Warum das passieren?
from __future__ import division
import numpy
import pprint
training = {"outlook":{"sunny":{"yes":2,"no":3},"overcast":{"yes":4,"no":0},"rainy":{"yes":3,"no":2}},\
"temperature":{"yes":[83,70,68,64,69,75,75,72,81],"no":[85,80,65,72,71]},\
"humidity":{"yes":[86,96,80,65,70,80,70,90,75],"no":[85,90,70,95,91]},\
"windy":{"false":{"yes":6,"no":2},"true":{"yes":3,"no":3}},\
"play":{"yes":9,"no":5}}
processed = {}
total_yes = training["play"]["yes"]
total_no = training["play"]["no"]
total_all = training["play"]["no"]+training["play"]["yes"]
def main():
for k,v in training.iteritems():
if(k != "play"):
for k2,v2 in v.iteritems():
if((k2 == "yes") & isinstance(v2,list)):
processed[k] = {"yes":{"mean":numpy.mean(v2),"std":numpy.std(v2,ddof=1)}}
elif((k2 == "no") & isinstance(v2,list)):
processed[k].update({"no":{"mean":numpy.mean(v2),"std":numpy.std(v2,ddof=1)}})
else:
processed[k] = {}
# the problems start here
for i,j in v2.iteritems():
if(i == "yes"):
p_yes = j/total_yes
processed[k].update({k2:{"yes":p_yes,"no":(1-p_yes)}})
#when I print processed[k], it contains current value only (not including previous value)
#suddenly exit after iterating once
else:
processed[k] = {"yes":total_yes/total_all,"no":total_no/total_all}
pp = pprint.PrettyPrinter(indent=3)
pp.pprint(processed)
if __name__ == '__main__':
main()
Die Ausgabe lautet:
...
'outlook': { 'sunny': { 'no': 0.7777777777777778,
'yes': 0.2222222222222222}},
...
Aber erwartete Ausgabe ist:
...
'outlook': { 'sunny': { 'no': 0.7777777777777778,
'yes': 0.2222222222222222}},
'overcast': { 'no':xxxxx,
'yes':xxx
}
...
...
Ich benutze 2.7 @BillBEGUERADJ – pacific01
Können Sie die Logik hinter dem Sie ein anderes Wörterbuch innerhalb der ersten eingefügt werden soll beschreiben? –
Grundsätzlich möchte ich jeden tiefsten Wert im "Outlook" -Schlüssel iterieren, seine Wahrscheinlichkeit berechnen und ihn zurück in "verarbeitete" Variable schieben. Ich mache das, um die Struktur unverändert zu lassen Original @BillBEGUERADJ – pacific01