来自 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(';')}
我正在尝试用口述来解释这个字符串:
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(';')}