Python从字符串中生成dict

2021-02-25 22:19:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一根这样的绳子:

home_id: [redacted] id: [7] name: [] model: []

我想把它变成一个dict,其中home_id是键,redactedwithout the braces)是值等等。我也许可以通过替换和拆分以及十几行代码来完成,但似乎有一种更简单的方法。如果您想知道,这是一个由openzwave中的louie dispatch返回的字符串,我已经找到了一种方法来获取预先分解的值。

是的,我在StackOverflow中搜索过类似的问题,但大多数问题的格式都是ast literal或JSON所能做到的,或者空格是更好的分隔符(在我的例子中,空格将对和键与值分开)。我不是正则表达式专家,所以我宁愿避免。谢谢。

3条回答
网友
1楼 ·

不使用re:

s = 'home_id: [redacted] id: [7] name: [] model: []'
d = dict([pair.strip().split(': [') for pair in s.split(']') if pair])

假设您的值和键不包含字符串']',因此它的唯一外观将作为分隔符。从好的方面来说,带空格的值不会让它出错。在

网友
2楼 ·

使用字典理解的非正则表达式方式:

>>> s = "home_id: [redacted] id: [7] name: [] model: []"
>>> tokens = s.split()
>>> d = {k.strip(':'):v.strip('[]') for k,v in
             zip(tokens[::2], tokens[1::2])}
>>> d
{'home_id': 'redacted', 'model': '', 'id': '7', 'name': ''}
网友
3楼 ·
import re
x="home_id: [redacted] id: [7] name: [] model: []"
print dict(re.findall(r"([^: ]*)\s*:\s*\[([^\]]*)\]",x))

试试这个。在

输出:{'home_id': 'redacted', 'model': '', 'id': '7', 'name': ''}

相关问题