尝试将分层字符串结构转换为字典。
尝试将分层字符串结构转换为字典。
我对Python新手,现在已经努力了两天,正在努力将基于层次的字符串结构转换为Python dict/list结构以更好地处理它:
字符串示例:
Operating_System/Linux/Apache Operating_System/Linux/Nginx Operating_System/Windows/Docker Operating_System/FreeBSD/Nginx
我尝试实现的是将每个字符串拆分并打包到Python dict中,类似于:
{'Operating_System': [{'Linux': ['Apache', 'Nginx']}, {'Windows': ['Docker']}, {'FreeBSD': ['Nginx']}]}
我尝试了多种方法,包括zip()和一些字符串split(\'/\')方式,然后通过嵌套迭代来进行操作,但我还没有解决它。 有人知道如何使用Python 3实现这样的好/优雅的方式吗?
此致,
Chris
admin 更改状态以发布 2023年5月22日
有一种方法... defaultdict 可以帮助这里:
#assumption is that it is a collection of strings strings = ["Operating_System/Linux/Apache", "Operating_System/Linux/Nginx", "Operating_System/Windows/Docker", "Operating_System/FreeBSD/Nginx"] from collections import defaultdict d = defaultdict(dict) e = defaultdict(list) m = [entry.split('/') for entry in strings] print(m) [['Operating_System', 'Linux', 'Apache'], ['Operating_System', 'Linux', 'Nginx'], ['Operating_System', 'Windows', 'Docker'], ['Operating_System', 'FreeBSD', 'Nginx']] for a,b,c in m: e[b].append(c) d[a] = e print(d) defaultdict(dict, {'Operating_System': defaultdict(list, {'Linux': ['Apache', 'Nginx'], 'Windows': ['Docker'], 'FreeBSD': ['Nginx']})})
如果你想要它们与你在输出中分享的完全相同,你可以跳过 defaultdict(dict)
部分 :
mapp = {'Operating_System':[{k:v} for k,v in e.items()]} mapp {'Operating_System': [{'Linux': ['Apache', 'Nginx']}, {'Windows': ['Docker']}, {'FreeBSD': ['Nginx']}]
}
这个 帖子 也很有用。