python将下列字符串转化为字典 3222 (_sex female) (_age senior) (_race black) (_face serious) (_prop '())
时间: 2024-03-25 11:42:04 浏览: 9
可以使用正则表达式和字典推导式来实现:
```python
import re
s = "3222 (_sex female) (_age senior) (_race black) (_face serious) (_prop '())"
# 使用正则表达式提取键值对
pattern = r'\((.*?)\s+(.*?)\)'
items = re.findall(pattern, s)
# 使用字典推导式生成字典
d = {k.strip('_'): v.strip("'") for k, v in items}
print(d) # 输出 {'sex': 'female', 'age': 'senior', 'race': 'black', 'face': 'serious', 'prop': '()'}
```
解释一下代码:
1. 首先,使用正则表达式 `r'\((.*?)\s+(.*?)\)'` 匹配字符串中所有形如 `(key value)` 的内容,其中 `\((.*?)\)` 表示匹配括号内的任意字符(非贪婪匹配),`\s+` 表示匹配空格(可以有多个),`(.*?)` 表示匹配值中的任意字符(非贪婪匹配)。
2. 使用 `re.findall()` 函数提取所有匹配结果。
3. 使用字典推导式 `{k.strip('_'): v.strip("'") for k, v in items}` 生成字典,其中 `k.strip('_')` 表示去掉键中的 `_`,`v.strip("'")` 表示去掉值中的引号。
最终输出的字典为 `{'sex': 'female', 'age': 'senior', 'race': 'black', 'face': 'serious', 'prop': '()'}`。