是否可以在没有双重拆分的情况下从未解析的字符串列表构造字典理解?
Is it possible to construct a dictionary comprehension from a list of unparsed strings without double split?
考虑以下字典理解:
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}
有没有一种"proper"方法可以在不调用x.split()
两次或更冗长的情况下实现前两行的结果?
直接进入 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'}
我不知道它是否更冗长,但这里有一个不调用 split
两次的替代方法:
patternMap = {x1:x2 for x1, x2 in map(lambda f: f.split('='), foo)}
考虑以下字典理解:
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}
有没有一种"proper"方法可以在不调用x.split()
两次或更冗长的情况下实现前两行的结果?
直接进入 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'}
我不知道它是否更冗长,但这里有一个不调用 split
两次的替代方法:
patternMap = {x1:x2 for x1, x2 in map(lambda f: f.split('='), foo)}