繁体   English   中英

我如何创建一个包含列表元素的特定字符串的字典?

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

我有一个列表,其中包含包含以“_”分隔的值的元素,我需要将第 4 个作为值,第 5 个和第 6 个作为字典的键

我的清单:

['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 = {
  "34_H08": "NGS",
  "Michael_Jordan_A10": "W2205770",
  "Michael_Jordan_B10": "W2205770",
...
  "DNA_F12": "No",
}

创建相同字典的优化方法

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

使用减少function

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

此代码可能对您有所帮助。

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'}

正如@matszwecja 所指出s.split('_')是通往 go 的途径。您可以访问拆分的不同部分,如下所示:

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}

尝试这个:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM