【问题标题】:Assigning intermediate variable in python list comprehension [duplicate]在python列表理解中分配中间变量[重复]
【发布时间】:2015-11-28 20:59:09
【问题描述】:

我有一个字符串列表(字符串和列表都可以很大)。我想仅从列表中的某些元素构建字典。

l = ['aaa 0','bbb 1','ccc 2','ddd 3','abc 1']
wanted = set(['aaa','abc'])
dict([x.split() for x in l if x.split()[0] in wanted])

{'aaa': '0', 'abc': '1'}

这可以在不调用split()操作两次的情况下完成吗?

【问题讨论】:

    标签: python dictionary list-comprehension


    【解决方案1】:

    使用嵌套生成器表达式 ((x.split() for x in l)) 生成键值对:

    >>> l = ['aaa 0', 'bbb 1', 'ccc 2', 'ddd 3', 'abc 1']
    >>> wanted = {'aaa', 'abc'}
    >>> {key: value for key, value in (x.split() for x in l) if key in wanted}
    {'abc': '1', 'aaa': '0'}
    

    【讨论】:

      【解决方案2】:

      我不知道是否更有效,但以下语句使用一次split

      {k: n for k, n in dict([x.split() for x in l]).iteritems() if k in wanted}
      

      【讨论】:

        【解决方案3】:

        您可以将 split() 操作减少到一个。

        l = ['aaa 0','bdb 1','ccc 2','ddd 3','abc 1']
        dict = { }
        s = set(['aaa','abc'])
        for elem in l:
            nl = elem.split()
            if nl[0] in s:
                dict[nl[0]] = nl[1]
        for elm in dict:
            print elm,dict[elm]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-04
          • 2014-02-03
          • 1970-01-01
          • 2021-09-04
          相关资源
          最近更新 更多