Bir sözlüğün üstesinden gelmeye çalışıyorum ve içindeki sözlüğü ekliyorum. Ama iteritems() kullanarak döngü kullandığımda, sadece bir kez yinelemek ve dış döngüye çıkmak. Python'da oldukça yeniyim ama bence bu kod çalışıyor olmalı.Python: iç içe iteritems döngüsü yalnızca bir kez çalıştır
Neden böyle oluyor?
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()
çıktısı:
...
'outlook': { 'sunny': { 'no': 0.7777777777777778,
'yes': 0.2222222222222222}},
...
Ama beklenen çıktısı:
...
'outlook': { 'sunny': { 'no': 0.7777777777777778,
'yes': 0.2222222222222222}},
'overcast': { 'no':xxxxx,
'yes':xxx
}
...
...
Ben 2,7 @BillBEGUERADJ – pacific01
Eğer ilk birinin içinde bir başka sözlüğü eklemek istediğiniz arkasında mantığı tarif edebilir kullanabilir? –
temel olarak "outlook" anahtarındaki her en derin değeri yinelemek, olasılığını hesaplamak ve "işlenmiş" değişkene geri itmek istiyorum. Yapıyı orijinal @BillBEGUERADJ – pacific01