使用[key]:[value]将字符串转换为字典

2024-06-02 09:18:25 发布

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

我正在尝试将以下字符串(多行)转换为python3+中的字典:

props_str ="
[persist.sys.bootupvolume]: [0]
[persist.sys.dalvik.vm.lib.2]: [li]
[persist.sys.device_provisioned]: [1]
[persist.sys.displayinset.top]: [0]
[persist.sys.isolated_storage]: [true]
[persist.sys.locale]: [en-US]
[persist.sys.phonelock.mode]: [0]
[persist.sys.sf.color_saturation]: [1.0]
[persist.sys.sf.native_mode]: [1]
[persist.sys.timezone]: []"

目前,我正在使用正则表达式将上述表达式转换为列表,然后将列表转换为字典

c = compile(r"\[(.*?)\]")
props_list = c.findall(props_str)

it = iter(props_list)
prop_dict = dict(zip(it, it))

使用这种方法,有时我会遗漏一些关键点:值。我正在寻找一种更简单的方法来转换它

假设字符串在一个[key]之间有一个换行符:\n[value]

props_str ="\
[persist.sys.bootupvolume]: [0]\
[persist.sys.dalvik.vm.lib.2]: [li]\
[persist.sys.device_provisioned]: [1]\
[persist.sys.displayinset.top]: [0]\
[persist.sys.isolated_storage]: [true]\
[persist.sys.locale]: \
[en-US]\
[persist.sys.phonelock.mode]: [0]\
[persist.sys.sf.color_saturation]: [1.0]\
[persist.sys.sf.native_mode]: [1]\
[persist.sys.timezone]: []\
[persist.sys.boot.reason]: []\
[persist.sys.boot.reason.history]: [reboot,hardware_reset,4831146 \
reboot,ota,1586292448 \
bootloader,4766793  \
reboot,4766775]"

输出将是:

{
   'persist.sys.bootupvolume': '0',
   'persist.sys.dalvik.vm.lib.2': 'li', 
   'persist.sys.device_provisioned': '1', 
   'persist.sys.displayinset.top': '0', 
   'persist.sys.isolated_storage': 'true', 
   'persist.sys.locale': 'en-US', 
   'persist.sys.phonelock.mode': '0', 
   'persist.sys.sf.color_saturation': '1.0', 
   'persist.sys.sf.native_mode': '1', 
   'persist.sys.timezone': ''
}

注意:它将丢失“persist.sys.boot.reason.history”属性,因为同一个key:value之间存在多个\n属性。还未转换persist.sys.boot.reason。不知道为什么


Tags: modedevicesysvmlisfpropsreason
1条回答
网友
1楼 · 发布于 2024-06-02 09:18:25

这个班轮应该可以

prop_dict = dict((k[1: -1], v[1: -1]) for k, v in (item.split(': ') for item in props_str.split('\n')[1:]))

这假设每个键值对之间都有一个换行符

它还假设第一行不是以键值对开始的。如果是,只需将props_str.split('\n')[1:]替换为props_str.split('\n')

上述方法与本answer中采用的方法类似

相关问题 更多 >