Home > Blockchain >  Is there a way to change a string of numbers and words into a nested list, where the name are associ
Is there a way to change a string of numbers and words into a nested list, where the name are associ

Time:09-16

Example string:

ex_name_age = "Hannah 12, Daniel 98, Maya 30, Elizabeth 96"

Wanted format output:

[['Hannah', 12],
 ['Daniel', 98],
 ['Maya', 30],
 ['Elizabeth', 96]]

I tried using:

name_age_a = ex_name_age.split(", ")
name_age_a = [[val] for val in name_age_a]
print(name_age_a)

Which resulted in:

[['Hannah 12'],
 ['Daniel 98'],
 ['Maya 30'],
 ['Elizabeth 96']]

So I went quite wrong...

Does anyone know how to solve this, so each list will contain both [["string", integer],...] ?

CodePudding user response:

One option using a list comprehension:

[[name, int(age)]
  for x in ex_name_age.split(', ')
  for name, age in [x.split()]
]

Output:

[['Hannah', 12],
 ['Daniel', 98],
 ['Maya', 30],
 ['Elizabeth', 96]]

CodePudding user response:

Actually you did correctly but second split is missing. You can try like this.

name_age_a = ex_name_age.split(", ")
name_age_a = [[val.split(' ')] for val in name_age_a]
print(name_age_a)

CodePudding user response:

Each val in name_age_a is a string like 'Hannah 12'. You need to split each of those strings on the empty space ' '.

ex_name_age = "Hannah 12, Daniel 98, Maya 30, Elizabeth 96"
name_age_a = ex_name_age.split(", ")
print(name_age_a) 
# ['Hannah 12', 'Daniel 98', 'Maya 30', 'Elizabeth 96']

out = []
for val in name_age_a:
    name, age = val.split(' ')  # unpack
    out.append([name, int(age)])
print(out)
# [['Hannah', 12], ['Daniel', 98], ['Maya', 30], ['Elizabeth', 96]]
  • Related