Python 自定义格式解析:将列表中的键和值配对以生成Dict

Python 自定义格式解析:将列表中的键和值配对以生成Dict,python,parsing,Python,Parsing,我正在尝试以自定义格式解析文件(如果有人遇到相同的问题,请使用max3ds) 我有一个节点列表,如下所示: [['*节点名称',''30deg017','*摄像机类型','目标','*节点名称',['*节点名称',''30deg017'这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;继承这些SCL;1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、

我正在尝试以自定义格式解析文件(如果有人遇到相同的问题,请使用max3ds)

我有一个节点列表,如下所示:


[['*节点名称',''30deg017','*摄像机类型','目标','*节点名称',['*节点名称',''30deg017'这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;这些方面;继承这些SCL;1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、“1”、““*TM_旋转轴”、“-0.3314”,‘0.1476’、‘0.9319’、‘TM_旋转角度’、‘1.5887’、‘TM_刻度’、‘1.0000’、‘1.0000’、‘TM_刻度轴’、‘0.9925’、‘0.1222’、‘0.0000’、‘TM_刻度轴桑’、‘0.1253’、‘NODE_TM’、‘NODE_名称’、‘30deg017.目标’“,”,“*继承位置”,“0”,“0”,“0”,“0”,“0”,“继承位置”,“0”,“0”,“0”,“0”,“继承位置”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0.0000”,“0”,“0”,“0”,“0.0000”,“0,“*TM_旋转角度”、“0.0000”、“TM_刻度”、“1.0000”、“1.0000”、“1.0000”、“TM_刻度轴”、“0.0000”、“0.0000”、“TM_刻度轴”、“0.0000”、“0.0000”、“0.0000”、“0.0000”、“0.0000”、“0.0000”、“0.0000”、“0.0000”、“0.000”、“0.000”、“1.1752”、“1.1752”、“1.0000”、“500.0000”等”]]

我想把它写进字典里。列表中每一个以星号开头的元素都是相邻元素的键,直到找到下一个键为止。还有嵌套元素。仅使用自然python就可以做到这一点吗

这是我目前的尝试:


class AllCameras:

    def __init__(self, file_string, line_ending='\n'):
        self.file_string = file_string
        self.output_dict = dict()
        self.line_ending = line_ending

    def __find_node_name(self, node):

        node_lines = node.split(self.line_ending)

        name_lines = [
            line for line in node_lines if "*NODE_NAME" in line.strip()]
        leading_name = name_lines[0].strip()
        leading_name = leading_name.split(" \"")[-1].replace("\"", "")
        return leading_name

    def __get_nodes(self):
        return self.file_string.split("*CAMERAOBJECT ")

    def __get_node_values(self):
        parse_nodes = []
        for node in self.__get_nodes():
            open_brace_pos = node.find('{')
            if open_brace_pos >= 0:
                parse_nodes.append(pyparsing.nestedExpr(
                    '{', '}').parseString(node[open_brace_pos:]).asList())
        return parse_nodes

    def parse_node(self, node):

        for n in node:
            if type(n) is list:
                self.parse_node(n)

            if type(n) is str and n.startswith('*'):
                print n, "IS KEY"

    def parse(self):
        nodes = self.__get_node_values()

        for node in nodes:

            self.parse_node(node)
我可以隔离节点中的所有键,但我不确定将键与值配对的最佳方法,特别是因为这是一个递归问题


如果键旁边有多个值,则应将它们分组到列表中。例如,
“*INHERIT\u POS”、“0”、“0”、“0”->”*INHERIT\u POS:[0,0]

您可以使用递归遍历嵌套列表来创建字典:

def get_dict(d):
   return {d[i]:d[i+1] if isinstance(d[i+1], str) else get_dict(d[i+1]) for i in range(0, len(d), 2)}
s = [['*NODE_NAME', '"30deg017"', '*CAMERA_TYPE', 'Target', '*NODE_TM', ['*NODE_NAME', '"30deg017"', '*INHERIT_POS', '0', '0', '0', '*INHERIT_ROT', '0', '0', '0', '*INHERIT_SCL', '1', '1', '1', '*TM_ROW0', '0.0939', '-0.9815', '-0.1668', '*TM_ROW1', '0.8819', '0.0043', '0.4714', '*TM_ROW2', '-0.4619', '-0.1913', '0.8660', '*TM_ROW3', '-230.9698', '-95.6709', '433.0127', '*TM_POS', '-230.9698', '-95.6709', '433.0127', '*TM_ROTAXIS', '-0.3314', '0.1476', '0.9319', '*TM_ROTANGLE', '1.5887', '*TM_SCALE', '1.0000', '1.0000', '1.0000', '*TM_SCALEAXIS', '0.9925', '-0.1222', '-0.0000', '*TM_SCALEAXISANG', '0.1253'], '*NODE_TM', ['*NODE_NAME', '"30deg017.Target"', '*INHERIT_POS', '0', '0', '0', '*INHERIT_ROT', '0', '0', '0', '*INHERIT_SCL', '0', '0', '0', '*TM_ROW0', '1.0000', '0.0000', '0.0000', '*TM_ROW1', '0.0000', '1.0000', '0.0000', '*TM_ROW2', '0.0000', '0.0000', '1.0000', '*TM_ROW3', '0.0000', '0.0000', '0.0000', '*TM_POS', '0.0000', '0.0000', '0.0000', '*TM_ROTAXIS', '0.0000', '0.0000', '0.0000', '*TM_ROTANGLE', '0.0000', '*TM_SCALE', '1.0000', '1.0000', '1.0000', '*TM_SCALEAXIS', '0.0000', '0.0000', '0.0000', '*TM_SCALEAXISANG', '0.0000'], '*CAMERA_SETTINGS', ['*TIMEVALUE', '0', '*CAMERA_NEAR', '0.0000', '*CAMERA_FAR', '1000000.0000', '*CAMERA_FOV', '1.1752', '*CAMERA_TDIST', '500.0000']]]
print(get_dict(s[0]))
输出:

{'*NODE_NAME': '"30deg017"', '*CAMERA_TYPE': 'Target', '*NODE_TM': {'*NODE_NAME': '"30deg017.Target"', '*INHERIT_POS': '0', '0': '0', '*INHERIT_ROT': '0', '*INHERIT_SCL': '0', '*TM_ROW0': '1.0000', '0.0000': '0.0000', '*TM_ROW1': '0.0000', '1.0000': '1.0000', '*TM_ROW2': '0.0000', '*TM_ROW3': '0.0000', '*TM_POS': '0.0000', '*TM_ROTAXIS': '0.0000', '*TM_ROTANGLE': '0.0000', '*TM_SCALE': '1.0000', '*TM_SCALEAXIS': '0.0000', '*TM_SCALEAXISANG': '0.0000'}, '*CAMERA_SETTINGS': {'*TIMEVALUE': '0', '*CAMERA_NEAR': '0.0000', '*CAMERA_FAR': '1000000.0000', '*CAMERA_FOV': '1.1752', '*CAMERA_TDIST': '500.0000'}}
{'*NODE_NAME': '"30deg017"', '*TM_ROW0': ['1.0000', '0.0000', '0.0000'], '*CAMERA_TYPE': 'Target', '*NODE_TM': {'*NODE_NAME': '"30deg017.Target"', '*INHERIT_POS': '0', '0': '0', '*INHERIT_ROT': '0', '*INHERIT_SCL': '0', '*TM_ROW0': '1.0000', '0.0000': '0.0000', '*TM_ROW1': '0.0000', '1.0000': '1.0000', '*TM_ROW2': '0.0000', '*TM_ROW3': '0.0000', '*TM_POS': '0.0000', '*TM_ROTAXIS': '0.0000', '*TM_ROTANGLE': '0.0000', '*TM_SCALE': '1.0000', '*TM_SCALEAXIS': '0.0000', '*TM_SCALEAXISANG': '0.0000'}, '*CAMERA_SETTINGS': {'*TIMEVALUE': '0', '*CAMERA_NEAR': '0.0000', '*CAMERA_FAR': '1000000.0000', '*CAMERA_FOV': '1.1752', '*CAMERA_TDIST': '500.0000'}}
编辑:

考虑到可能有多个需要分组的数据“运行”,您可以尝试以下方法:

s = [['*NODE_NAME', '"30deg017"', '*TM_ROW0', '1.0000', '0.0000', '0.0000', '*CAMERA_TYPE', 'Target', '*NODE_TM', ['*NODE_NAME', '"30deg017"', '*INHERIT_POS', '0', '0', '0', '*INHERIT_ROT', '0', '0', '0', '*INHERIT_SCL', '1', '1', '1', '*TM_ROW0', '0.0939', '-0.9815', '-0.1668', '*TM_ROW1', '0.8819', '0.0043', '0.4714', '*TM_ROW2', '-0.4619', '-0.1913', '0.8660', '*TM_ROW3', '-230.9698', '-95.6709', '433.0127', '*TM_POS', '-230.9698', '-95.6709', '433.0127', '*TM_ROTAXIS', '-0.3314', '0.1476', '0.9319', '*TM_ROTANGLE', '1.5887', '*TM_SCALE', '1.0000', '1.0000', '1.0000', '*TM_SCALEAXIS', '0.9925', '-0.1222', '-0.0000', '*TM_SCALEAXISANG', '0.1253'], '*NODE_TM', ['*NODE_NAME', '"30deg017.Target"', '*INHERIT_POS', '0', '0', '0', '*INHERIT_ROT', '0', '0', '0', '*INHERIT_SCL', '0', '0', '0', '*TM_ROW0', '1.0000', '0.0000', '0.0000', '*TM_ROW1', '0.0000', '1.0000', '0.0000', '*TM_ROW2', '0.0000', '0.0000', '1.0000', '*TM_ROW3', '0.0000', '0.0000', '0.0000', '*TM_POS', '0.0000', '0.0000', '0.0000', '*TM_ROTAXIS', '0.0000', '0.0000', '0.0000', '*TM_ROTANGLE', '0.0000', '*TM_SCALE', '1.0000', '1.0000', '1.0000', '*TM_SCALEAXIS', '0.0000', '0.0000', '0.0000', '*TM_SCALEAXISANG', '0.0000'], '*CAMERA_SETTINGS', ['*TIMEVALUE', '0', '*CAMERA_NEAR', '0.0000', '*CAMERA_FAR', '1000000.0000', '*CAMERA_FOV', '1.1752', '*CAMERA_TDIST', '500.0000']]]

import itertools
def create_dict(f):
   def wrapper(d):
      def make_d(s):
         return {s[i]:s[i+1] if all(not c.startswith('*') for c in s[i+1]) or isinstance(s[i+1], str) else make_d(s[i+1]) for i in range(0, len(s), 2)}
      return make_d(f(d))
   return wrapper

@create_dict
def group_data(d):
   data = [(a, list(b)) for a, b in itertools.groupby(d, key=lambda x:isinstance(x, list) or not x.startswith('*'))]
   return [b[0] if not a else b if all(isinstance(i, str) for i in b) and len(b) > 1 else b[0] for a, b in data]

print(group_data(s[0]))
输出:

{'*NODE_NAME': '"30deg017"', '*CAMERA_TYPE': 'Target', '*NODE_TM': {'*NODE_NAME': '"30deg017.Target"', '*INHERIT_POS': '0', '0': '0', '*INHERIT_ROT': '0', '*INHERIT_SCL': '0', '*TM_ROW0': '1.0000', '0.0000': '0.0000', '*TM_ROW1': '0.0000', '1.0000': '1.0000', '*TM_ROW2': '0.0000', '*TM_ROW3': '0.0000', '*TM_POS': '0.0000', '*TM_ROTAXIS': '0.0000', '*TM_ROTANGLE': '0.0000', '*TM_SCALE': '1.0000', '*TM_SCALEAXIS': '0.0000', '*TM_SCALEAXISANG': '0.0000'}, '*CAMERA_SETTINGS': {'*TIMEVALUE': '0', '*CAMERA_NEAR': '0.0000', '*CAMERA_FAR': '1000000.0000', '*CAMERA_FOV': '1.1752', '*CAMERA_TDIST': '500.0000'}}
{'*NODE_NAME': '"30deg017"', '*TM_ROW0': ['1.0000', '0.0000', '0.0000'], '*CAMERA_TYPE': 'Target', '*NODE_TM': {'*NODE_NAME': '"30deg017.Target"', '*INHERIT_POS': '0', '0': '0', '*INHERIT_ROT': '0', '*INHERIT_SCL': '0', '*TM_ROW0': '1.0000', '0.0000': '0.0000', '*TM_ROW1': '0.0000', '1.0000': '1.0000', '*TM_ROW2': '0.0000', '*TM_ROW3': '0.0000', '*TM_POS': '0.0000', '*TM_ROTAXIS': '0.0000', '*TM_ROTANGLE': '0.0000', '*TM_SCALE': '1.0000', '*TM_SCALEAXIS': '0.0000', '*TM_SCALEAXISANG': '0.0000'}, '*CAMERA_SETTINGS': {'*TIMEVALUE': '0', '*CAMERA_NEAR': '0.0000', '*CAMERA_FAR': '1000000.0000', '*CAMERA_FOV': '1.1752', '*CAMERA_TDIST': '500.0000'}}

可以使用递归遍历嵌套列表以创建字典:

def get_dict(d):
   return {d[i]:d[i+1] if isinstance(d[i+1], str) else get_dict(d[i+1]) for i in range(0, len(d), 2)}
s = [['*NODE_NAME', '"30deg017"', '*CAMERA_TYPE', 'Target', '*NODE_TM', ['*NODE_NAME', '"30deg017"', '*INHERIT_POS', '0', '0', '0', '*INHERIT_ROT', '0', '0', '0', '*INHERIT_SCL', '1', '1', '1', '*TM_ROW0', '0.0939', '-0.9815', '-0.1668', '*TM_ROW1', '0.8819', '0.0043', '0.4714', '*TM_ROW2', '-0.4619', '-0.1913', '0.8660', '*TM_ROW3', '-230.9698', '-95.6709', '433.0127', '*TM_POS', '-230.9698', '-95.6709', '433.0127', '*TM_ROTAXIS', '-0.3314', '0.1476', '0.9319', '*TM_ROTANGLE', '1.5887', '*TM_SCALE', '1.0000', '1.0000', '1.0000', '*TM_SCALEAXIS', '0.9925', '-0.1222', '-0.0000', '*TM_SCALEAXISANG', '0.1253'], '*NODE_TM', ['*NODE_NAME', '"30deg017.Target"', '*INHERIT_POS', '0', '0', '0', '*INHERIT_ROT', '0', '0', '0', '*INHERIT_SCL', '0', '0', '0', '*TM_ROW0', '1.0000', '0.0000', '0.0000', '*TM_ROW1', '0.0000', '1.0000', '0.0000', '*TM_ROW2', '0.0000', '0.0000', '1.0000', '*TM_ROW3', '0.0000', '0.0000', '0.0000', '*TM_POS', '0.0000', '0.0000', '0.0000', '*TM_ROTAXIS', '0.0000', '0.0000', '0.0000', '*TM_ROTANGLE', '0.0000', '*TM_SCALE', '1.0000', '1.0000', '1.0000', '*TM_SCALEAXIS', '0.0000', '0.0000', '0.0000', '*TM_SCALEAXISANG', '0.0000'], '*CAMERA_SETTINGS', ['*TIMEVALUE', '0', '*CAMERA_NEAR', '0.0000', '*CAMERA_FAR', '1000000.0000', '*CAMERA_FOV', '1.1752', '*CAMERA_TDIST', '500.0000']]]
print(get_dict(s[0]))
输出:

{'*NODE_NAME': '"30deg017"', '*CAMERA_TYPE': 'Target', '*NODE_TM': {'*NODE_NAME': '"30deg017.Target"', '*INHERIT_POS': '0', '0': '0', '*INHERIT_ROT': '0', '*INHERIT_SCL': '0', '*TM_ROW0': '1.0000', '0.0000': '0.0000', '*TM_ROW1': '0.0000', '1.0000': '1.0000', '*TM_ROW2': '0.0000', '*TM_ROW3': '0.0000', '*TM_POS': '0.0000', '*TM_ROTAXIS': '0.0000', '*TM_ROTANGLE': '0.0000', '*TM_SCALE': '1.0000', '*TM_SCALEAXIS': '0.0000', '*TM_SCALEAXISANG': '0.0000'}, '*CAMERA_SETTINGS': {'*TIMEVALUE': '0', '*CAMERA_NEAR': '0.0000', '*CAMERA_FAR': '1000000.0000', '*CAMERA_FOV': '1.1752', '*CAMERA_TDIST': '500.0000'}}
{'*NODE_NAME': '"30deg017"', '*TM_ROW0': ['1.0000', '0.0000', '0.0000'], '*CAMERA_TYPE': 'Target', '*NODE_TM': {'*NODE_NAME': '"30deg017.Target"', '*INHERIT_POS': '0', '0': '0', '*INHERIT_ROT': '0', '*INHERIT_SCL': '0', '*TM_ROW0': '1.0000', '0.0000': '0.0000', '*TM_ROW1': '0.0000', '1.0000': '1.0000', '*TM_ROW2': '0.0000', '*TM_ROW3': '0.0000', '*TM_POS': '0.0000', '*TM_ROTAXIS': '0.0000', '*TM_ROTANGLE': '0.0000', '*TM_SCALE': '1.0000', '*TM_SCALEAXIS': '0.0000', '*TM_SCALEAXISANG': '0.0000'}, '*CAMERA_SETTINGS': {'*TIMEVALUE': '0', '*CAMERA_NEAR': '0.0000', '*CAMERA_FAR': '1000000.0000', '*CAMERA_FOV': '1.1752', '*CAMERA_TDIST': '500.0000'}}
编辑:

考虑到可能有多个需要分组的数据“运行”,您可以尝试以下方法:

s = [['*NODE_NAME', '"30deg017"', '*TM_ROW0', '1.0000', '0.0000', '0.0000', '*CAMERA_TYPE', 'Target', '*NODE_TM', ['*NODE_NAME', '"30deg017"', '*INHERIT_POS', '0', '0', '0', '*INHERIT_ROT', '0', '0', '0', '*INHERIT_SCL', '1', '1', '1', '*TM_ROW0', '0.0939', '-0.9815', '-0.1668', '*TM_ROW1', '0.8819', '0.0043', '0.4714', '*TM_ROW2', '-0.4619', '-0.1913', '0.8660', '*TM_ROW3', '-230.9698', '-95.6709', '433.0127', '*TM_POS', '-230.9698', '-95.6709', '433.0127', '*TM_ROTAXIS', '-0.3314', '0.1476', '0.9319', '*TM_ROTANGLE', '1.5887', '*TM_SCALE', '1.0000', '1.0000', '1.0000', '*TM_SCALEAXIS', '0.9925', '-0.1222', '-0.0000', '*TM_SCALEAXISANG', '0.1253'], '*NODE_TM', ['*NODE_NAME', '"30deg017.Target"', '*INHERIT_POS', '0', '0', '0', '*INHERIT_ROT', '0', '0', '0', '*INHERIT_SCL', '0', '0', '0', '*TM_ROW0', '1.0000', '0.0000', '0.0000', '*TM_ROW1', '0.0000', '1.0000', '0.0000', '*TM_ROW2', '0.0000', '0.0000', '1.0000', '*TM_ROW3', '0.0000', '0.0000', '0.0000', '*TM_POS', '0.0000', '0.0000', '0.0000', '*TM_ROTAXIS', '0.0000', '0.0000', '0.0000', '*TM_ROTANGLE', '0.0000', '*TM_SCALE', '1.0000', '1.0000', '1.0000', '*TM_SCALEAXIS', '0.0000', '0.0000', '0.0000', '*TM_SCALEAXISANG', '0.0000'], '*CAMERA_SETTINGS', ['*TIMEVALUE', '0', '*CAMERA_NEAR', '0.0000', '*CAMERA_FAR', '1000000.0000', '*CAMERA_FOV', '1.1752', '*CAMERA_TDIST', '500.0000']]]

import itertools
def create_dict(f):
   def wrapper(d):
      def make_d(s):
         return {s[i]:s[i+1] if all(not c.startswith('*') for c in s[i+1]) or isinstance(s[i+1], str) else make_d(s[i+1]) for i in range(0, len(s), 2)}
      return make_d(f(d))
   return wrapper

@create_dict
def group_data(d):
   data = [(a, list(b)) for a, b in itertools.groupby(d, key=lambda x:isinstance(x, list) or not x.startswith('*'))]
   return [b[0] if not a else b if all(isinstance(i, str) for i in b) and len(b) > 1 else b[0] for a, b in data]

print(group_data(s[0]))
输出:

{'*NODE_NAME': '"30deg017"', '*CAMERA_TYPE': 'Target', '*NODE_TM': {'*NODE_NAME': '"30deg017.Target"', '*INHERIT_POS': '0', '0': '0', '*INHERIT_ROT': '0', '*INHERIT_SCL': '0', '*TM_ROW0': '1.0000', '0.0000': '0.0000', '*TM_ROW1': '0.0000', '1.0000': '1.0000', '*TM_ROW2': '0.0000', '*TM_ROW3': '0.0000', '*TM_POS': '0.0000', '*TM_ROTAXIS': '0.0000', '*TM_ROTANGLE': '0.0000', '*TM_SCALE': '1.0000', '*TM_SCALEAXIS': '0.0000', '*TM_SCALEAXISANG': '0.0000'}, '*CAMERA_SETTINGS': {'*TIMEVALUE': '0', '*CAMERA_NEAR': '0.0000', '*CAMERA_FAR': '1000000.0000', '*CAMERA_FOV': '1.1752', '*CAMERA_TDIST': '500.0000'}}
{'*NODE_NAME': '"30deg017"', '*TM_ROW0': ['1.0000', '0.0000', '0.0000'], '*CAMERA_TYPE': 'Target', '*NODE_TM': {'*NODE_NAME': '"30deg017.Target"', '*INHERIT_POS': '0', '0': '0', '*INHERIT_ROT': '0', '*INHERIT_SCL': '0', '*TM_ROW0': '1.0000', '0.0000': '0.0000', '*TM_ROW1': '0.0000', '1.0000': '1.0000', '*TM_ROW2': '0.0000', '*TM_ROW3': '0.0000', '*TM_POS': '0.0000', '*TM_ROTAXIS': '0.0000', '*TM_ROTANGLE': '0.0000', '*TM_SCALE': '1.0000', '*TM_SCALEAXIS': '0.0000', '*TM_SCALEAXISANG': '0.0000'}, '*CAMERA_SETTINGS': {'*TIMEVALUE': '0', '*CAMERA_NEAR': '0.0000', '*CAMERA_FAR': '1000000.0000', '*CAMERA_FOV': '1.1752', '*CAMERA_TDIST': '500.0000'}}

请使用您迄今为止尝试过的代码更新您的问题。在解析之前,列表是否可以展平,或者数据的性质是分层的?您能否给出一些所需输出的示例?我想知道
*INHERIT_POS
应该如何显示,因为它后面跟着
'0','0','0'
数据是分层的,不同层次之间的键是相同的,所以展平没有帮助。对于您提到的示例,所需的输出将是
*INHERIT_POS:[0,0,0]
。因此您需要:
“*INHERIT_POS:[0,0,0]
'*NODE_NAME':“'30deg017'”
,但不是:
'*NODE_NAME':[''30deg017']
请使用您迄今为止尝试过的代码更新您的问题。在解析之前是否可以展平列表,或者数据的性质是分层的?你能给出一些期望输出的例子吗?我想知道
*INHERIT_POS
应该如何显示,因为它后面跟着
'0','0','0'
数据是分层的,不同层次之间的键是相同的,所以展平没有帮助。对于您提到的示例,所需的输出将是
*INHERIT_POS:[0,0,0]
。因此您需要:
“*INHERIT_POS:[0,0,0]
'*NODE_NAME':'“30deg017”
,但不是:
'*NODE_NAME':[''30deg017']
这是一个很好的开始,我会看看是否可以调整它。问题是一个键可以有多个值,表示向量。例如,
'*TM_-ROW0':'1.0000','0.0000':'0.0000'
应解析为
'*TM_-ROW0':['1.0000','0.0000','0.0000']
James,您需要指定所需的输出!这是一个很好的开始,我会看看我是否能适应它。问题是一个键可以有多个值,表示向量。例如,
'*TM_-ROW0':'1.0000','0.0000':'0.0000'
应解析为
'*TM_-ROW0':['1.0000','0.0000','0.0000']
James,您需要指定所需的输出!