haoyunpeng
haoyunpeng

Reputation: 13

How to convert string into nested dictionary using Python code

How to convert string DS into nested dictionary DD using Python code

ds = '''TTTT.0.OOOO.UUUU.OOOO.PPPP.DDDD.1-1
date = 2012
time = 12
size = 558
maths = mediaTTTT.1.OOOO.UUUU.OOOO.PPPP.DDDD.1-1
date = 2012
time = 12
size = 558
maths = mediaTTTT.2.OOOO.UUUU.OOOO.PPPP.DDDD.1-1
date = 2012
time = 12
size = 1024
maths = mediaTTTT.3.OOOO.UUUU.OOOO.PPPP.DDDD.1-1
date = 2012
time = 12
size = 1024
maths = mediaTTTT.4.OOOO.UUUU.OOOO.PPPP.DDDD.1-1
date = 2012
time = 12
size = 1024
maths = media'''dd = {'TTTT.0.OOOO.UUUU.OOOO.PPPP.DDDD.1-1': {'date': '2012', 'time': '12', 'size': '558', 'maths': 'media'},
  'TTTT.1.OOOO.UUUU.OOOO.PPPP.DDDD.1-1': {'date': '2012', 'time': '12', 'size': '558', 'maths': 'media'},
  'TTTT.2.OOOO.UUUU.OOOO.PPPP.DDDD.1-1': {'date': '2012', 'time': '12', 'size': '1024', 'maths': 'media'},
  'TTTT.3.OOOO.UUUU.OOOO.PPPP.DDDD.1-1': {'date': '2012', 'time': '12', 'size': '1024', 'maths': 'media'},
  'TTTT.4.OOOO.UUUU.OOOO.PPPP.DDDD.1-1': {'date': '2012', 'time': '12', 'size': '1024', 'maths': 'media'}
  }

I use racadm(dell cmd bios) to get the return, and the result is DS. Many methods are not translated into nested dictionaries, so I ask for help here

Upvotes: 0

Views: 1088

Answers (1)

JkShaw
JkShaw

Reputation: 1947

Try this:

    >>> ds = '''TTTT.0.OOOO.UUUU.OOOO.PPPP.DDDD.1-1
... date = 2012
... time = 12
... size = 558
... maths = mediaTTTT.1.OOOO.UUUU.OOOO.PPPP.DDDD.1-1
... date = 2012
... time = 12
... size = 558
... maths = mediaTTTT.2.OOOO.UUUU.OOOO.PPPP.DDDD.1-1
... date = 2012
... time = 12
... size = 1024
... maths = mediaTTTT.3.OOOO.UUUU.OOOO.PPPP.DDDD.1-1
... date = 2012
... time = 12
... size = 1024
... maths = mediaTTTT.4.OOOO.UUUU.OOOO.PPPP.DDDD.1-1
... date = 2012
... time = 12
... size = 1024
... maths = media'''

>>> {'TTTT'+rec[0]: dict(t.split(' = ') for t in rec[1:]) for rec in  [item.split('\n') for item in ds.split('TTTT') if item != '']}
{'TTTT.3.OOOO.UUUU.OOOO.PPPP.DDDD.1-1': {'size': '1024', 'maths': 'media', 'time': '12', 'date': '2012'}, 'TTTT.1.OOOO.UUUU.OOOO.PPPP.DDDD.1-1': {'size': '558', 'maths': 'media', 'time': '12', 'date': '2012'}, 'TTTT.0.OOOO.UUUU.OOOO.PPPP.DDDD.1-1': {'size': '558', 'maths': 'media', 'time': '12', 'date': '2012'}, 'TTTT.4.OOOO.UUUU.OOOO.PPPP.DDDD.1-1': {'size': '1024', 'maths': 'media', 'time': '12', 'date': '2012'}, 'TTTT.2.OOOO.UUUU.OOOO.PPPP.DDDD.1-1': {'size': '1024', 'maths': 'media', 'time': '12', 'date': '2012'}}

Without List Comprehensions for better readability:

res = {}
for item in ds.split('TTTT'):
   if item != '':
      rec = item.split('\n')
      res['TTTT'+rec[0]] = dict(t.split(' = ') for t in rec[1:])
print(res)

Upvotes: 1

Related Questions