1. 程式人生 > >python字典無限遍歷

python字典無限遍歷

.get 自身 AS 目標 sta __init__ ini elif 嵌套

#無限遍歷dict,通過key獲取value,嵌套字典存在多個相同的key,可獲取多個key
class getValues(object):
def __init__(self):
pass

#無限遍歷dict,通過key獲取value,嵌套字典存在多個相同的key,可獲取多個key
def get_target_value(self,key, dic, tmp_list):
"""
:param key: 目標key值
:param dic: JSON數據
:param tmp_list: 用於存儲獲取的數據
:return: list
"""
if not isinstance(dic, dict) or not isinstance(tmp_list, list): # 對傳入數據進行格式校驗
return ‘argv[1] not an dict or argv[-1] not an list ‘

if key in dic.keys():
tmp_list.append(dic[key]) # 傳入數據存在則存入tmp_list
for val in dic.values():
if isinstance(val, dict):
self.get_target_value(key, val, tmp_list) # 傳入數據的value值是字典,則直接調用自身
elif isinstance(val, (list, tuple)):
self.get_value(key, val, tmp_list) # 傳入數據的value值是列表或者元組,則調用get_value
else:
for value in dic.values(): # 傳入數據不符合則對其value值進行遍歷
if isinstance(value, dict):
self.get_target_value(key, value, tmp_list) # 傳入數據的value值是字典,則直接調用自身
elif isinstance(value, (list, tuple)):
self.get_value(key, value, tmp_list) # 傳入數據的value值是列表或者元組,則調用get_value
return tmp_list

#循環判斷是否需要遍歷value,get_target_value子方法
def get_value(self,key, val, tmp_list):
for val_ in val:
if isinstance(val_, dict):
self.get_target_value(key, val_, tmp_list) # 傳入數據的value值是字典,則調用get_target_value
elif isinstance(val_, (list, tuple)):
self.get_value(key, val_, tmp_list) # 傳入數據的value值是列表或者元組,則調用自身

python字典無限遍歷