来自 split str 的字典理解

Dict comprehension from split str

我正在尝试用口述来解释这个字符串:

a='ALLELEID=677660;CLNDISDB=MedGen:C0162671,OMIM:540000,Orphanet:ORPHA550,SNOMED_CT:39925003;CLNDN=Juvenile_myopathy,_encephalopathy,_lactic_acidosis_AND_stroke;CLNHGVS=NC_012920.1:m.15992A>T;CLNREVSTAT=criteria_provided,_single_submitter;CLNSIG=Likely_benign;CLNVC=single_nucleotide_variant;CLNVCSO=SO:0001483;GENEINFO=MT-TP:4571;ORIGIN=1'

这个有效:

d={}
for i in a.split(';'):
    key, val = i.split('=')
    d[key] = val

为什么这行不通?

d={key: val for key, val in i.split('=') for i in a.split(';')}

尝试使用:

d={i.split('=')[0]: i.split('=')[1] for i in a.split(';')}

不需要第二个循环(即使你需要它也是错误的,你需要将第二个循环放在第一个循环之后)。

您不能有嵌套的字典推导式(与嵌套列表推导式不同)。以下将起作用:

dict(item.split("=") for item in a.split(';'))

dict() 可以从 2 元素列表或元组的列表构建字典。

要在此处使用列表理解,您应该使用:

{key: val for i in a.split(';'), for key, val in i.split('=')}

但即使您将代码更改为此,它也不会工作,因为这是错误的:

for key, val in i.split('=')

i.split('=') 的结果是一个一维数组,您只能在其中迭代一个元素。

所以最终,您只需要一个列表理解级别:

{i.split('=')[0]: i.split('=')[1] for i in a.split(';')}