将嵌套的花括号转换为dict python

时间:2016-02-02 13:57:04

标签: python dictionary data-structures

我有一个看起来像这样的文件:

{val1 {val2 {d1 d2 d3}}}

我想制作一个dict或其他合适的数据结构,以便像这样访问结构:

data[val1][val2]

将在另一个合适的数据结构(如list,tuple或set)中输出数据值d1, d2, d3

是否有可以执行此操作的内置库函数或任何人都可以建议一种简单的方法来执行此操作?

注意:数据点d1 d2 d3的数量可能不一定,因此对于一组不同的值,我可以d1 d2 d3 d4 d5等。

编辑:我应该补充说我写了输出,所以如果需要,我可以将大括号改为完全不同的东西。

2 个答案:

答案 0 :(得分:4)

如果您的所有数据都与示例一样简单,您可以执行一些字符串操作将其转换为json。

Suite Setup - OneTimeSetup
Test Fixture - OneTimeSetup
Test Setup
Actual Test1
Test Teardown
Test Setup
Actual Test2
Test Teardown
Test Fixture TearDown - OneTimeTearDown
Suite TearDown - OneTimeTearDown

如果您还拥有更复杂的嵌套数据,您可能需要添加一两步才能在有效json之前添加或删除逗号。

答案 1 :(得分:0)

我不知道你会对这些数据做些什么,但根据你提供的信息,这似乎很有用。至少它可以给你一个想法,你可以按照自己的意愿操纵转换器。

______ exampledata.txt

{a{a{hello world}}}
{a{b{stack over flow}}}
{b{a{example data 1}}}
{b{b{data example 2}}}

______ converter.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")

______ converteddata.txt(转换器会产生这个)

data['a-a'] = ['hello', 'world']
data['a-b'] = ['stack', 'over', 'flow']
data['b-a'] = ['example', 'data', '1']
data['b-b'] = ['data', 'example', '2']

______转换数据的使用

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)]

编辑:您不会将转换后的数据复制/粘贴到主项目中。如果你有大数据,你的主项目文件似乎非常糟糕。所以你可以创建一个convertdata.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]