可以选择按照needkeys顺序,或者不按照顺序,找到findkeys关键字都存在的某行
def findKeyByKeys(CurLevelKey, outputdata, findKeys, needKeys, order=True):
isLastFind = False
if isinstance(needKeys, list):
needKeysMap = OrderedDict()
for item in needKeys:
needKeysMap[item] = 0
needKeysTupleMap = (needKeysMap,)
needKeys = needKeysTupleMap
elif isinstance(needKeys, tuple):
pass
else:
print "传入查找关键字参数错误,请使用list"
return False
values = needKeys[0].values()
isLastFind = True if sum(values) == len(values) else False
if not isinstance(CurLevelKey, dict):
return
elif order:
if isLastFind:
for item in CurLevelKey:
for findkey in findKeys:
rightLevel = True
if not CurLevelKey.has_key(findkey):
rightLevel = False
break
if rightLevel:
outputdata.append(CurLevelKey)
return True
findKeyByKeys(CurLevelKey[item],
outputdata, findKeys, needKeys, order)
else:
for item in needKeys[0]:
if needKeys[0][item] == 0:
orderfindKey = item
break
for item in CurLevelKey:
if type(orderfindKey) == type(item):
if orderfindKey == item:
needKeys[0][orderfindKey] = 1
findKeyByKeys(CurLevelKey[item],
outputdata, findKeys, needKeys, order)
else:
if isLastFind:
for item in CurLevelKey:
for findkey in findKeys:
rightLevel = True
if not CurLevelKey.has_key(findkey):
rightLevel = False
break
if rightLevel:
outputdata.append(CurLevelKey)
return True
findKeyByKeys(CurLevelKey[item],
outputdata, findKeys, needKeys, order)
else:
for item in CurLevelKey:
for needkey in needKeys[0]:
if type(item) == type(needkey):
if item == needkey:
needKeys[0][needkey] = 1
findKeyByKeys(CurLevelKey[item],
outputdata, findKeys, needKeys, order)