gpt4 book ai didi

python - 从列表列表创建字典

转载 作者:太空狗 更新时间:2023-10-29 16:53:16 25 4
gpt4 key购买 nike

我有一个我读入的文本文件。这是一个日志文件,因此它遵循特定的模式。我最终需要创建一个 JSON,但是通过研究这个问题,一旦它在字典中,就需要使用 json.loads()json.dumps()

文本文件的示例如下。

INFO:20180606_141527:submit:is_test=False
INFO:20180606_141527:submit:username=Mary
INFO:20180606_141527:env:sys.platform=linux2
INFO:20180606_141527:env:os.name=ubuntu

我最终要寻找的字典结构是

{
"INFO": {
"submit": {
"is_test": false,
"username": "Mary"
},
"env": {
"sys.platform": "linux2",
"os.name": "ubuntu"
}
}
}

我暂时忽略每个列表中的时间戳信息。

这是我正在使用的代码片段,

import csv
tree_dict = {}
with open('file.log') as file:
for row in file:
for key in reversed(row.split(":")):
tree_dict = {key: tree_dict}

这会导致不希望的输出,

{'INFO': {'20180606_141527': {'submit': {'os.name=posix\n': {'INFO': {'20180606_141527': {'submit': {'sys.platform=linux2\n': {'INFO': {'20180606_141527': {'submit': {'username=a227874\n': {'INFO': {'20180606_141527': {'submit': {'is_test=False\n': {}}}}}}}}}}}}}}}}}

我需要动态填充字典,因为我不知道实际的字段/键名。

最佳答案

with open('demo.txt') as f:
lines = f.readlines()

dct = {}

for line in lines:
# param1 == INFO
# param2 == submit or env
# params3 == is_test=False etc.
param1, _, param2, params3 = line.strip().split(':')

# create dct[param1] = {} if it is not created
dct.setdefault(param1, {})

# create dct[param1][param2] = {} if it is no created
dct[param1].setdefault(param2, {})

# for example params3 == is_test=False
# split it by '=' and now we unpack it
# k == is_test
# v == False
k, v = params3.split('=')

# and update our `dict` with the new values
dct[param1][param2].update({k: v})

print(dct)

输出

{
'INFO': {
'submit': {
'is_test': 'False', 'username': 'Mary'
},
'env': {
'sys.platform': 'linux2', 'os.name': 'ubuntu'
}
}
}

关于python - 从列表列表创建字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51258434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com