首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试将分层字符串结构导入到字典中

问尝试将分层字符串结构导入到字典中
EN

Stack Overflow用户
提问于 2020-05-13 19:06:10
回答 1查看 61关注 0票数 3

我是python的新手,两天来,我一直在努力将基于层次结构的字符串结构融入到python的字典/列表结构中,以便更好地处理它:

示例字符串:

代码语言:javascript
复制
Operating_System/Linux/Apache
Operating_System/Linux/Nginx
Operating_System/Windows/Docker
Operating_System/FreeBSD/Nginx

我试图实现的是将每个字符串拆分,并将其打包到python字典中,这应该类似于:

代码语言:javascript
复制
{'Operating_System': [{'Linux': ['Apache', 'Nginx']}, {'Windows': ['Docker']}, {'FreeBSD': ['Nginx']}]}

我尝试了多种方法,包括zip()和一些通过字符串拆分(‘/’)的方法,然后通过嵌套迭代来完成,但我仍然无法解决它。有没有人知道用python3实现这样的事情的好的/优雅的方法?

诚挚的问候,

克里斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-13 19:38:45

一种方法是……defaultdict可以在这里提供帮助:

代码语言:javascript
复制
#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)部分:

代码语言:javascript
复制
mapp = {'Operating_System':[{k:v} for k,v in e.items()]}
mapp

{'Operating_System': [{'Linux': ['Apache', 'Nginx']},
  {'Windows': ['Docker']},
  {'FreeBSD': ['Nginx']}]

}

这个post也很有用

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61772972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档