尝试将分层字符串结构转换为字典。

20 浏览
0 Comments

尝试将分层字符串结构转换为字典。

我对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日
0
0 Comments

有一种方法... 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']}]

}

这个 帖子 也很有用。

0