将括号之间的字符串数据转换为Python列表

问题描述 投票:0回答:1

我有很多这种格式的数据集:

{{1,{{1,6,0-0:14.0.1.255,4,*},{1,6,0-0:14.0.2.255,4,*},{2,70,0-1:96.3.10.255,[1..2],0}}},{2,{{1,6,0-0:14.0.1.255,4,*},{1,6,0-0:14.0.2.255,4,*},{2,70,0-1:96.3.10.255,[1..2],0}}},{3,{{1,6,0-0:14.0.1.255,4,*},{1,6,0-0:14.0.2.255,4,*},{2,70,0-1:96.3.10.255,[1..2],0}}},{4,{{1,6,0-0:14.0.1.255,4,*},{1,6,0-0:14.0.2.255,4,*},{2,70,0-1:96.3.10.255,[1..2],0}}}}

我想将它转换成Python列表或任何其他更实用的数据类型以供以后使用,dict也可以。

我考虑过 ast.literal_eval() 但所有数据都必须在“”中。我已经为此绞尽脑汁了几个小时,但还没有找到一个足够强大的解决方案,可以将任何类型的数据放在这些括号之间并用逗号分隔。

python list
1个回答
0
投票

您没有指定每个值应代表什么,所以我对每个项目使用数字

      import json
  data = '{{1,{{1,6,0-0:14.0.1.255,4,*},{1,6,0-0:14.0.2.255,4,*},{2,70,0-1:96.3.10.255,[1..2],0}}},{2,{{1,6,0-0:14.0.1.255,4,*},{1,6,0-0:14.0.2.255,4,*},{2,70,0-1:96.3.10.255,[1..2],0}}},{3,{{1,6,0-0:14.0.1.255,4,*},{1,6,0-0:14.0.2.255,4,*},{2,70,0-1:96.3.10.255,[1..2],0}}},{4,{{1,6,0-0:14.0.1.255,4,*},{1,6,0-0:14.0.2.255,4,*},{2,70,0-1:96.3.10.255,[1..2],0}}}}'
  
  data_dict = {
      key: {i: {j: item for j, item in enumerate(v.split(','))} 
            for i, v in enumerate(value[1:-1].replace('},{', '}|{').split('|'))}
      for key, value in [d[1:-1].replace(',{{', '|{{').split('|') 
                         for d in data[1:-1].replace('}},{', '}}|{').split('|')]}
  
  print(json.dumps(data_dict, indent=4))
  

输出:

{
    "1": {
        "0": {
            "0": "{1",
            "1": "6",
            "2": "0-0:14.0.1.255",
            "3": "4",
            "4": "*}"
        },
        "1": {
            "0": "{1",
            "1": "6",
            "2": "0-0:14.0.2.255",
            "3": "4",
            "4": "*}"
        },
        "2": {
            "0": "{2",
            "1": "70",
            "2": "0-1:96.3.10.255",
            "3": "[1..2]",
            "4": "0}"
        }
    },
    "2": {
        "0": {
            "0": "{1",
            "1": "6",
            "2": "0-0:14.0.1.255",
            "3": "4",
            "4": "*}"
        },
        "1": {
            "0": "{1",
            "1": "6",
            "2": "0-0:14.0.2.255",
            "3": "4",
            "4": "*}"
        },
        "2": {
            "0": "{2",
            "1": "70",
            "2": "0-1:96.3.10.255",
            "3": "[1..2]",
            "4": "0}"
        }
    },
    "3": {
        "0": {
            "0": "{1",
            "1": "6",
            "2": "0-0:14.0.1.255",
            "3": "4",
            "4": "*}"
        },
        "1": {
            "0": "{1",
            "1": "6",
            "2": "0-0:14.0.2.255",
            "3": "4",
            "4": "*}"
        },
        "2": {
            "0": "{2",
            "1": "70",
            "2": "0-1:96.3.10.255",
            "3": "[1..2]",
            "4": "0}"
        }
    },
    "4": {
        "0": {
            "0": "{1",
            "1": "6",
            "2": "0-0:14.0.1.255",
            "3": "4",
            "4": "*}"
        },
        "1": {
            "0": "{1",
            "1": "6",
            "2": "0-0:14.0.2.255",
            "3": "4",
            "4": "*}"
        },
        "2": {
            "0": "{2",
            "1": "70",
            "2": "0-1:96.3.10.255",
            "3": "[1..2]",
            "4": "0}"
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.