是否可以从未解析的字符串列表构建字典理解而不进行双重拆分?

时间:2018-02-27 04:29:59

标签: python dictionary dictionary-comprehension

考虑以下字典理解:

foo = ['super capital=BLUE', 'super foo=RED']
patternMap = {x.split("=")[0]:x.split("=")[1] for x in foo}

这是相当简洁的,但我不喜欢我需要两次致电x.split('=')的事实。我尝试了以下但它只会导致语法错误。

patternMap = {y[0] : y[1] for y in x.split('=') for x in foo}

是否有一种“正确”的方法可以在前两行中获得结果而无需拨打x.split()两次或更加详细?

2 个答案:

答案 0 :(得分:6)

直接使用类似的元组dict

代码:

patternMap = dict(x.split('=') for x in foo)

测试代码:

foo = ['super capital=BLUE', 'super foo=RED']
patternMap = {x.split("=")[0]: x.split("=")[1] for x in foo}
print(patternMap)

patternMap = dict(x.split('=') for x in foo)
print(patternMap)

# or if you really need a longer way
patternMap = {y[0]: y[1] for y in (x.split('=') for x in foo)}
print(patternMap)

结果:

{'super capital': 'BLUE', 'super foo': 'RED'}
{'super capital': 'BLUE', 'super foo': 'RED'}
{'super capital': 'BLUE', 'super foo': 'RED'}

答案 1 :(得分:0)

我不知道它是否更详细,但是如果没有两次调用split,这是另一种选择:

patternMap = {x1:x2 for x1, x2 in map(lambda f: f.split('='), foo)}