如何将命令输出的字符串(str)转换为指定结构的字典?
我来帮你搞定这个转换问题,这里有两种可靠的Python实现方式,能精准把压缩的命令输出转换成你要的字典结构:
方法1:基于固定键列表的分割法
这种方法的核心思路是利用已知的键顺序来精准切割字符串,避免因为值里包含空格而拆分错误——毕竟你的Members字段里有带空格的多值内容,还有Comment字段是空值,这种方法能完美处理这些情况:
# 输入的压缩字符串 input_str = 'Group Name: STI IP: v4 Comment: Group Items: 2 Type: User-defined Members: "vm-1" "vm-2"' # 定义目标字典的键,按输入字符串中的顺序排列 target_keys = ["Group Name", "IP", "Comment", "Group Items", "Type", "Members"] result_dict = {} current_position = 0 for idx, key in enumerate(target_keys): # 定位当前键在字符串中的起始位置 key_start = input_str.find(key, current_position) if key_start == -1: result_dict[key] = "" continue # 找到键后面的冒号位置 colon_pos = input_str.find(":", key_start + len(key)) if colon_pos == -1: result_dict[key] = "" current_position = key_start + len(key) continue # 确定当前键对应值的结束位置:如果不是最后一个键,就以上一个键的起始位置为终点;否则取到字符串末尾 if idx < len(target_keys) - 1: next_key = target_keys[idx + 1] next_key_start = input_str.find(next_key, colon_pos + 1) value = input_str[colon_pos + 1:next_key_start].strip() else: value = input_str[colon_pos + 1:].strip() result_dict[key] = value print(result_dict)
运行后输出的结果就是你要的结构:
{'Group Name': 'STI', 'IP': 'v4', 'Comment': '', 'Group Items': '2', 'Type': 'User-defined', 'Members': '"vm-1" "vm-2"'}
方法2:正则表达式匹配法
如果输入字符串的键顺序是固定不变的,用正则表达式会更简洁,直接按固定模式匹配每个键值对:
import re input_str = 'Group Name: STI IP: v4 Comment: Group Items: 2 Type: User-defined Members: "vm-1" "vm-2"' # 编写匹配模式,注意最后一个Members用(.*)匹配到字符串末尾,避免截断多值内容 pattern = r'Group Name: (.*?) IP: (.*?) Comment: (.*?) Group Items: (.*?) Type: (.*?) Members: (.*)' match_result = re.match(pattern, input_str) if match_result: result_dict = { "Group Name": match_result.group(1).strip(), "IP": match_result.group(2).strip(), "Comment": match_result.group(3).strip(), "Group Items": match_result.group(4).strip(), "Type": match_result.group(5).strip(), "Members": match_result.group(6).strip() } print(result_dict)
这种方法代码量更少,适合键顺序固定的场景,同样能输出符合要求的字典。
内容的提问来源于stack exchange,提问作者Satnau
相关产品推荐
相关产品推荐

