在Python列表推导式中分配中间变量

6

我有一个字符串列表(包含大量的字符串和列表)。我希望从列表中仅选取特定的元素来构建字典。

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()操作两次的情况下,这是否可以完成?

3个回答

10

使用嵌套的生成器表达式 ((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}

1
你可以将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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接