首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用字典理解将字符串解析到字典中的pythonic方法

使用字典理解将字符串解析到字典中的pythonic方法
EN

Stack Overflow用户
提问于 2021-04-09 08:42:24
回答 3查看 66关注 0票数 0

对于给定的字符串

代码语言:javascript
运行
复制
key = "test: abc :bcd,ef:1923:g, x : y : z\nkey2 :1st:second\n  etc :values:2,3,4:..."

我想解析字符串以将第一个令牌作为键,将其余元素作为值列表存储到字典中,结果类似于以下结果:

代码语言:javascript
运行
复制
{'test': ['abc', 'bcd,ef', '1923', 'g, x', 'y', 'z'], 'key2': ['1st', 'second'], 'etc': ['values', '2,3,4', '...']}

我有过

代码语言:javascript
运行
复制
def parseLine(line):
    return list(map(str.strip, line.split(":")))

result = {parseLine(line)[0]:parseLine(line)[1:] for line in str_txt.split('\n')}
print(result)

但是在字典解释的表达式中,函数parseLine被调用两次以将字典的键和值设置为parseLine(line)[0]:parseLine(line)[1:]

有没有更好的方法来重写字典的解释?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-04-09 10:26:07

代码语言:javascript
运行
复制
{lst[0]:lst[1:] for lst in map(lambda s: list(map(str.strip, s.split(":"))), key.split('\n'))}

它提供了:

代码语言:javascript
运行
复制
{'test': ['abc', 'bcd,ef', '1923', 'g, x', 'y', 'z'],
 'key2': ['1st', 'second'],
 'etc': ['values', '2,3,4', '...']}
票数 1
EN

Stack Overflow用户

发布于 2021-04-09 10:39:28

您可以在理解中使用map来应用函数,然后对结果进行解构。

代码语言:javascript
运行
复制
result = {k: v for k, *v in map(parseLine, str_txt.split('\n'))}

另请注意,如果您仅使用parseLine完成此操作,则可以在不转换为list的情况下重写它

代码语言:javascript
运行
复制
def parseLine(line):
    return map(str.strip, line.split(":"))
票数 1
EN

Stack Overflow用户

发布于 2021-04-09 08:59:57

代码语言:javascript
运行
复制
import re

s = "test: abc :bcd,ef:1923:g, x : y : z\nkey2 :1st:second\n  etc :values:2,3,4:..."

s = re.sub(r'[^a-z0-9,]',' ',s)

print ({ x.split()[0]:x.split()[1:] for x in s.split("\n") })

输出:

代码语言:javascript
运行
复制
{'test': ['abc', 'bcd,ef', '1923', 'g,', 'x', 'y', 'z'], 'key2': ['1st', 'second'], 'etc': ['values', '2,3,4']}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67013588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档