У меня есть вложенный dict
, как указано ниже:
d = {'A': [{'B': [{'C': [{'D1':[]}, {'D2': []}]}]}]} # just an example
И мне дан список / путь, подобный этому:
l = ['A','B','C','D1']
Я бы хотел пройти попуть в dict
для получения соответствующего значения D1
.Для этого я написал следующую программу:
def find_dict(ld, key):
# we can assume that 'ld' has dicts each of which has unique key
for d in ld:
if key not in d:
continue
return d
def walk_dict(d,path):
temp = None
for i,n in enumerate(path):
if i == 0:
temp = d.get(n)
elif i < (len(path)-1):
temp = find_dict(temp, n)
temp = temp.get(n)
else: # last item
temp = find_dict(temp, n)
print('Found it!')
print(i,n)
print(temp.get(n))
return temp.get(n)
d = {'A': [{'B': [{'C': [{'D1':[]}, {'D2': []}]}]}]}
l = ['A','B','C','D1'] # successfully retrieved the value of 'D1'
walk_dict(d,l)
l = ['A','B','C','D2'] # successfully retrieved the value of 'D2'
walk_dict(d,l)
l = ['A','B','C','D3'] # get NoneType error as expected because 'D3' does not exist
walk_dict(d,l)
Я хотел бы знать, есть ли лучший способ сделать это.Я чувствую, что этот подход слишком многословен, и, возможно, даже имеются скрытые ошибки.
Заранее благодарю за ваши ответы / предложения!