重新理解表达式

问题描述 投票:0回答:1

是否有可能在理解中重用子表达式,该子表达式可能很大,计算起来很昂贵,或者像生成器一样是非幂等的?

说有要转换为字典的字符串列表:

items = ['ab: 1', 'cd: 2', 'ef:3']  ===>  {'ab': '1', 'cd': '2', 'ef': '3'}

循环一次计算“昂贵”的拆分表达式:

d = {}
for item in items:
    k, v = item.split(':', maxsplit=1)
    d.update({k.strip(): v.strip()})

理解将为每个输出元素重复计算:

d = {x.split(':', maxsplit=1)[0].strip(): x.split(':', maxsplit=1)[1].strip() for x in items}

但是所需的解决方案是一种理解,该表达式只计算一次表达式,然后重新使用它:

d = {k.strip(): v.strip() for x in items for k, v in x.split(':', maxsplit=1)}     # Wrong - need an assignment

可以完成吗?

python dictionary-comprehension
1个回答
1
投票
a = ['ab: 1', 'cd: 2', 'ef:3']

将生成器表达式与map和字典一起使用comprehension

In [46]: b = (map(str.strip,thing.split(':')) for thing in a)

In [47]: d = {k:v for (k,v) in b}

In [48]: d
Out[48]: {'ab': '1', 'cd': '2', 'ef': '3'}
© www.soinside.com 2019 - 2024. All rights reserved.