列表理解包括不同大小的元素

时间:2016-10-06 08:52:05

标签: python

我有以下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]的大小可能不同,有没有办法在一行中执行此类操作。我问的原因是我可能错误地认为t[0]中最多有3个部门,实际上可能更多,如果可能的话我想保存代码行。

从本质上讲,我真正喜欢的是根据我的数据列出一个合理数量的最大可能部门的列表,即6,然后有类似的东西

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

这很好,因为t[0]的大小总是至少为1.但是这里它变得棘手,下面的代码行不会产生pythonic意义:

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

依此类推......

如果我没有说明问题标题,请按要求更改!谢谢!

1 个答案:

答案 0 :(得分:0)

原来可以使用以下代码行,根据相关列表的大小检查索引,并在列表解析中使用if else:

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]