python2.7中yield使用案例demo

# -*- coding:utf-8 -*-
import json
import time

info1 = [['2018-06-24-00', '24'], ['2018-06-24-01', '28']]
info2 = [['2018-06-24', '45','79']]

def jsonToMap(dict):
    jsonstr = json.dumps(dict)
    return json.loads(jsonstr)

def packMap(dict,index,dateArray,data):
    dictTemp={}
    if(index+1!=len(dateArray)):
        key=dateArray[index]
        value=dateArray[index+1]
        if(dict.has_key(key)!=True):
            dict[key]=packMap(dictTemp,index+1,dateArray,data).next()
        elif(dict.has_key(key)):
            if(jsonToMap(dict[key]).has_key(value) ):
                dictTemp2={}
                dictTemp2=jsonToMap(dict[key])
                dict[key]=packMap(dictTemp2,index+1,dateArray,data).next()
            else:
                dictTemp3={}
                dictTemp3=jsonToMap(dict[key])
                dict[key]=packMap(dictTemp3,index+1,dateArray,data).next()
    else:
        dict[dateArray[index]]=data
        yield dict

    #return dict



linedata1 = {}
for data in info1:
    for index in packMap(linedata1, 0, str(data[0]).split("-"), data[1]):
        111
print linedata1

linedata2 = {}
for data in info2:
    for index in packMap(linedata2, 0, str(data[0]).split("-"), data[1:]):
        111
print linedata2

#dict爲橫向,dict2爲基準點字典,即dict2爲覈對依據,返回的是覈對後的dict的數據
def compareMap(dict1,dict2): #返回元組
    tempDict={}#dict1的數據規範後
    tempDict2={}#dict2的數據規範後
    for key in dict1.keys():
        if(dict2.has_key(key)):
            if(str(dict1[key]).find("{")!=-1):
                dictValue=jsonToMap(dict1[key])
                for key2 in dictValue.keys():
                    if(jsonToMap(dict2[key]).has_key(key2 ) ):
                        tuptemp=compareMap(dictValue,jsonToMap(dict2[key])).next()
                        tempDict[key]=tuptemp[0]
                        tempDict2[key]=tuptemp[1]
            else:
                if(dict2.has_key(key)): #此處的key爲dict1的最後一層key了
                    pointValue=[]
                    for point in jsonToMap(dict2[key]).keys():
                        pointValue.append(dict1[key][int(point)])
                    tempDict[key]=pointValue
                    tempDict2[key]=jsonToMap(dict2[key]).values()
    yield tempDict,tempDict2

start2=time.time()

for index in compareMap(linedata2,linedata1):
    comparedict=index
end=time.time()
print end-start2
print comparedict

在搜索python遞歸優化時搜索到python yield,爲學習yield寫此demo,此時對yield的理解還太淺,尚處於可以用的階段,若深入理解後,再來補充

========2018-06-24記錄==============

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章