将嵌套的大括号转换为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)