将嵌套的大括号转换为dict python
我有一个文件如下所示:将嵌套的大括号转换为dict python,python,dictionary,data-structures,Python,Dictionary,Data Structures,我有一个文件如下所示: {val1 {val2 {d1 d2 d3}}} 我想制作一个dict或另一个合适的数据结构,以便像这样访问该结构: data[val1][val2] 将数据值d1、d2、d3输出到另一个合适的数据结构中,如列表、元组或集合 是否有内置的库函数可以做到这一点,或者有人可以建议一种简单的方法来做到这一点 注:数据点的数量d1 d2 d3可能不是常数,因此对于不同的值集,我可以使用d1 d2 d3 d4 d5等 编辑:我应该加上我写的输出,所以如果需要,我可以将大括号更改
{val1 {val2 {d1 d2 d3}}}
我想制作一个dict或另一个合适的数据结构,以便像这样访问该结构:
data[val1][val2]
将数据值d1、d2、d3
输出到另一个合适的数据结构中,如列表、元组或集合
是否有内置的库函数可以做到这一点,或者有人可以建议一种简单的方法来做到这一点
注:数据点的数量d1 d2 d3
可能不是常数,因此对于不同的值集,我可以使用d1 d2 d3 d4 d5
等
编辑:我应该加上我写的输出,所以如果需要,我可以将大括号更改为完全不同的内容 我不知道您将如何处理这些数据,但根据您提供的信息,这似乎很有用。至少它可以给你一个想法,你可以随心所欲地操纵转换器 ______exampledata.txt
{a{a{hello world}}}
{a{b{stack over flow}}}
{b{a{example data 1}}}
{b{b{data example 2}}}
______转换器.py
import os
fo = open("exampledata.txt", "r")
data = fo.read()
fo.close()
data = data.split("\n")
fo = open("converteddata.txt", "w")
for line in data:
line = line.split("{")
if len(line) < 2:
break
fo.write("data['")
fo.write(line[1]+"-"+line[2]+"'] = [")
splitData = line[3].split("}}}")[0]
splitData = splitData.split(" ")
for d in splitData:
fo.write("'"+d+"', ")
fo.seek(-2, os.SEEK_END)
fo.truncate()
fo.write("]\n")
______转换数据的使用
data = dict()
data["a-a"] = ["hello", "world"]
data["a-b"] = ["stack", "over", "flow"]
data["b-a"] = ["example", "data", "1"]
data["b-b"] = ["data", "example", "2"]
val1 = raw_input("Please enter first parameter : ")
val2 = raw_input("Please enter second parameter : ")
index = raw_input("Please enter index : ")
print data[val1+"-"+val2][int(index)]
编辑:您不会将转换后的数据复制/粘贴到主项目中。如果你有大数据,你的主要项目文件看起来很糟糕。因此,您可以创建一个converteddata.py
data = dict()
data['a-a'] = ['hello', 'world']
data['a-b'] = ['stack', 'over', 'flow']
data['b-a'] = ['example', 'data', '1']
data['b-b'] = ['data', 'example', '2']
然后您可以将其导入到主项目中,如
from converteddata import data
print data["a-a"][0]
如果所有数据都像示例一样简单,那么可以进行一些字符串操作,将其转换为json
import re, json
data = '{val1 {val2 {d1 d2 d3}}}'
data = re.sub(r'(\w+)', r'"\1"', data) # {"val1" {"val2" {"d1" "d2" "d3"}}}
data = re.sub(r'"\s*{', r'": {', data) # {"val1": {"val2": {"d1" "d2" "d3"}}}
data = re.sub(r'" "', r'", "', data) # {"val1": {"val2": {"d1", "d2", "d3"}}}
data = re.sub(r'{([^{}]*)}', r'[\1]', data) # {"val1": {"val2": ["d1", "d2", "d3"]}}
json.loads(data)
如果您还有嵌套更复杂的数据,则可能需要再添加一两个步骤来添加或删除逗号,才能使其成为有效的json。这不是一种常见格式,因此没有内置函数来处理此问题。编写代码来标记、解析和吐出字典。下面是一个帮助字典化它的快捷方法
replace('{',':{')[1://code>这并不容易。您的值包含在{}
中,但您希望它们作为[]
根据您拥有的这些值的数量,将文件转换为YAML可能更容易(或JSON)首先,然后使用库。@user1654183:你说的“我编写了输出”是什么意思。你选择了格式吗?最好使用JSON之类的标准格式。
import re, json
data = '{val1 {val2 {d1 d2 d3}}}'
data = re.sub(r'(\w+)', r'"\1"', data) # {"val1" {"val2" {"d1" "d2" "d3"}}}
data = re.sub(r'"\s*{', r'": {', data) # {"val1": {"val2": {"d1" "d2" "d3"}}}
data = re.sub(r'" "', r'", "', data) # {"val1": {"val2": {"d1", "d2", "d3"}}}
data = re.sub(r'{([^{}]*)}', r'[\1]', data) # {"val1": {"val2": ["d1", "d2", "d3"]}}
json.loads(data)