Reputation:
I need to convert tuples with nested tuples to a dictionary with dictionaries
b = ('abcm1', (
('mxcludm', '123'),
('an1', 'abcaa'),
('an2', 'dmf'),
('an3', 'mf'),
('an4', 'dfd'),
('an5', 'asdfs'),
('ou', 'tmst'),
('output', 'ou'),
('archi', (
('an1***an2', ''),
('an2***an3', ''),
('an3***an4', ''),
('an4***an5', '')
)
),
('customer', '1'))
)
My Expected out
{'abcm1': {
'mxcludm':'123',
'an1': 'abcaa',
'an2': 'dmf',
'an3': 'mf',
'an4': 'dfd',
'an5': 'asdfs',
'ou': 'tmst',
'output': 'ou',
'archi':{
'an1***an2': '',
'an2***an3': '',
'an3***an4': '',
'an4***an5': ''
},
'customer': '1'
}
}
For 2 tuple we can pass directly
def Convert(tup, di):
di = dict(tup)
return di
di = {}
tup = ('a2', 'aa'), ('i', 'aa'), ('w4', 'aa'), ('i5', 'aa')
print (Convert(tup, di))
while i am proceeding i got error too many values to unpact
Upvotes: 0
Views: 232
Reputation: 17156
There is an error in your desired output
'customer': 'dmfault' should be 'customer': '1'
Here's a recursive function that handles arbitrary levels of nesting.
Code
def convert(item):
if isinstance(item, str):
return item
# Key as string
# Just need to convert value
if isinstance(item[0], str):
return {item[0]:convert(item[1])} # convert value
# Convert key & value as elements in dictionary di
di = {}
for x in item:
di.update(convert(x))
return di
Test
b = ('abcm1', (('mxcludm', '123'), ('an1', 'abcaa'), ('an2', 'dmf'), ('an3', 'mf'), ('an4', 'dfd'), ('an5', 'asdfs'), ('ou', 'tmst'), ('output', 'ou'), ('archi', (('an1***an2', ''), ('an2***an3', ''), ('an3***an4', ''), ('an4***an5', ''))), ('customer', '1')))
di = convert(b)
print(di)
Output
{'abcm1': {'mxcludm': '123', 'an1': 'abcaa', 'an2': 'dmf', 'an3': 'mf', 'an4': 'dfd', 'an5': 'asdfs', 'ou': 'tmst', 'output': 'ou', 'archi': {'an1***an2': '', 'an2***an3': '', 'an3***an4': '', 'an4***an5': ''}, 'customer': '1'}}
Upvotes: 1