2016-10-06 61 views
0

的元素,我有以下for/if-elif-else环路提取从元组t部门的信息以列表的基础上,t[0]大小:列表理解,包括不同尺寸

for t in filt: 
    if len(t[0]) == 1: 
     pass 
    elif len(t[0]) == 2: 
     if 'organization' in t[0][0]['affiliation']: 
      depA = t[0][0]['affiliation']['organization'] 
     else: depA = 'Not Available' 

     if 'organization' in t[0][1]['affiliation']: 
      depB = t[0][1]['affiliation']['organization'] 
     else: depB = 'Not Available' 

     depC = 'None' 


    else: 
     if 'organization' in t[0][0]['affiliation']: 
      depA = t[0][0]['affiliation']['organization'] 
     else: depA = 'Not Available' 

     if 'organization' in t[0][1]['affiliation']: 
      depB = t[0][1]['affiliation']['organization'] 
     else: depB = 'Not Available' 

     if 'organization' in t[0][2]['affiliation']: 
      depC = t[0][1]['affiliation']['organization'] 
     else: depC = 'Not Available' 

有没有办法做这样的事情即使t[0]的尺寸可能不同,也是如此。我要问的原因是我可能错误地认为最多有3个部门在t[0],实际上可能更多,如果可能,我想保存代码行。

在本质上有什么我真的想为像具有基于我的数据的合理数量的可能的最大部门的列表IE 6,然后有一些像

for t in filt: 
    depA = [t[0][0]['affiliation']['organization'] if 'organization' in t[0][0]['affiliation'] else 'Not Available'] 

这是很好的,因为t[0]是大小至少为1的总但这里的地方变得棘手和代码行下面不会使Python的意义:

depB = [t[0][1]['affiliation']['organization'] if t[0][1] exists AND 'organization' in t[0][1]['organization'] else 'Not Available'] 

等等...

如果我没有问题标题权利,请根据需要更改!谢谢!

+0

这将是有益的,如果你确实表现出一定的源数据,而不仅仅是代码。 – unwind

+0

现在就为你取回 –

+0

我对这段代码做的唯一修改就是删除'if len(t [0])== 1:pass'并将'else:'改为'elif len(t [0])!= 1:...'。我不想把这么长的表达放在一行中。 – TigerhawkT3

回答

0

原来下面的代码行会的工作,检查,对有问题的列表的大小的指标和使用,如果其他人在列表理解:

depB = [t[0][1]['affiliation']['organization'] if 2<=len(t[0]) and 'organization' in t[0][1]['affiliation'] else 'Not Available' for t in filt]