Ниже приведены данные в моем файле yaml, комбинация списка и словаря. Пример данных:
innings:
- 1st innings:
team: Kings XI Punjab
deliveries:
- 0.1:
batsman: RS Bopara
bowler: JA Morkel
non_striker: IK Pathan
runs:
batsman: 1
extras: 0
total: 1
- 0.2:
batsman: IK Pathan
bowler: JA Morkel
non_striker: RS Bopara
runs:
batsman: 1
extras: 0
total: 1
- 2nd innings:
team: Chennai Super Kings
deliveries:
- 0.1:
batsman: PA Patel
bowler: IK Pathan
extras:
wides: 1
non_striker: ML Hayden
runs:
batsman: 0
extras: 1
total: 1
- 0.2:
batsman: PA Patel
bowler: IK Pathan
non_striker: ML Hayden
runs:
batsman: 0
extras: 0
total: 0
Я хочу, чтобы данные были в кадре данных, как показано ниже.
Delivery, Batsman, Bowler, non_striker, runs_batsman, runs_extras, extras_type, Runs_total, player_out, mode_of_dismissal, fielders_involved
0.1, RS Bopara, JA Morkel, IK Pathan, 1, 0, NA(if extras are 0), 1, NA, NA, NA
И ниже приведен код, который я нашел для выравнивания данных, но я не смог изменить в соответствии с мне нужно, и мне нужно, чтобы код был выполнен с использованием самой рекурсии. (Я уже понял, используя циклы, но это не выглядит эффективным)
def flatten(d,sep="_"):
obj = collections.OrderedDict()
def recurse(t,parent_key=""):
if isinstance(t,list):
for i in range(len(t)):
recurse(t[i], parent_key + sep + str(i) if parent_key else str(i))
elif isinstance(t,dict):
for k,v in t.items():
recurse(v, parent_key + sep + str(k) if parent_key else str(k))
else:
obj[parent_key] = t
recurse(d)
return obj