How could I create a dictionary taking specific strings of elements of a list?

Viewed 35

I have a list with elements that contain values separated by "_" and I need to take the 4th as the values and the 5 and 6th as keys of a dictionary

My list:

['MLID_D_08_NGS_34_H08.fsa',
 'MLID_D_17_W2205770_Michael_Jordan_A10.fsa',
 'MLID_D_18_W2205770_Michael_Jordan_B10.fsa',
 'MLID_D_19_W2205768_Maradona_Guti_C10.fsa',
 'MLID_D_20_W2205768_Maradona_Guti_D10.fsa',
 'MLID_D_38_No_DNA_F12.fsa']

I am trying to get a dictionary like this

thisdict = {
  "34_H08": "NGS",
  "Michael_Jordan_A10": "W2205770",
  "Michael_Jordan_B10": "W2205770",
...
  "DNA_F12": "No",
}
4 Answers

Optimised way of creating same dictionary

thisdict = dict(
  (lambda x: ('_'.join(x[4:6]), x[3]))(s.split('_'))
  for s in lst
)

Using reduce function

reduce(lambda x, y: x.update({ '_'.join(y.split('_')[4:6]): y.split('_')[3] }) or x, lst, {})

This code may help you.

lst = ['MLID_D_08_NGS_34_H08.fsa',
 'MLID_D_17_W2205770_Michael_Jordan_A10.fsa',
 'MLID_D_18_W2205770_Michael_Jordan_B10.fsa',
 'MLID_D_19_W2205768_Maradona_Guti_C10.fsa',
 'MLID_D_20_W2205768_Maradona_Guti_D10.fsa',
 'MLID_D_38_No_DNA_F12.fsa']



lst = [a.split('.') for a in lst] # split by . 

dict_ = {}


for l in lst:
    k = '_'.join(l[0].split('_')[4:]) # make key 
    v = l[0].split('_')[3] # make value
    dict_[k]=v # add value to dict
print(dict_)

OUTPUT

{'34_H08': 'NGS',
 'Michael_Jordan_A10': 'W2205770',
 'Michael_Jordan_B10': 'W2205770',
 'Maradona_Guti_C10': 'W2205768',
 'Maradona_Guti_D10': 'W2205768',
 'DNA_F12': 'No'}

As @matszwecja indicated s.split('_') is the way to go. You can access different parts of the split as follows:

lst = ['MLID_D_08_NGS_34_H08.fsa',
 'MLID_D_17_W2205770_Michael_Jordan_A10.fsa',
 'MLID_D_18_W2205770_Michael_Jordan_B10.fsa',
 'MLID_D_19_W2205768_Maradona_Guti_C10.fsa',
 'MLID_D_20_W2205768_Maradona_Guti_D10.fsa',
 'MLID_D_38_No_DNA_F12.fsa']

thisdict = {s.split('_')[4] + '_' + s.split('_')[5].split('.')[0]: s.split('_')[3] for s in lst}

Try this:

lst = ['MLID_D_08_NGS_34_H08.fsa',
 'MLID_D_17_W2205770_Michael_Jordan_A10.fsa',
 'MLID_D_18_W2205770_Michael_Jordan_B10.fsa',
 'MLID_D_19_W2205768_Maradona_Guti_C10.fsa',
 'MLID_D_20_W2205768_Maradona_Guti_D10.fsa',
 'MLID_D_38_No_DNA_F12.fsa']

dic = {}
for name in lst:
    name = name.split(".")[0].split("_")
    dic["_".join(name[4:])] = name[3]
print(dic)
Related