我是python的新手,两天来,我一直在努力将基于层次结构的字符串结构融入到python的字典/列表结构中,以便更好地处理它:
示例字符串:
Operating_System/Linux/Apache
Operating_System/Linux/Nginx
Operating_System/Windows/Docker
Operating_System/FreeBSD/Nginx我试图实现的是将每个字符串拆分,并将其打包到python字典中,这应该类似于:
{'Operating_System': [{'Linux': ['Apache', 'Nginx']}, {'Windows': ['Docker']}, {'FreeBSD': ['Nginx']}]}我尝试了多种方法,包括zip()和一些通过字符串拆分(‘/’)的方法,然后通过嵌套迭代来完成,但我仍然无法解决它。有没有人知道用python3实现这样的事情的好的/优雅的方法?
诚挚的问候,
克里斯
发布于 2020-05-13 19:38:45
一种方法是……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']}]}
这个post也很有用
https://stackoverflow.com/questions/61772972
复制相似问题