使用python的嵌套字典

我正在尝试在python中编写嵌套类型的字典。我提供了我的输入和预期的输出以及我尝试过的代码。

这是我的输入内容

input = [['10','PS_S1U_X2_LP','permit','origin','igp','RM_S1U_X2_LP'],['20','',['10','MPLS-LOOPBACK','MPLS-LOOPBACK-RLFA'],]

我想要的输出是:

output = 
"route_policy_list": [
{
          "policy_terms": [],"route_policy_statement": [
            {
              "entry": "10","prefix_list": "PS_S1U_X2_LP","action_statements": [
                {
                  "action_value": "igp","action": "permit","action_statement": "origin"
                }
              ]
            },{
                "entry": "20","prefix_list": "","action_statements": [
                  {
                    "action_value": "","action_statement": ""
                  }
                ]  
            }
          ],"name": "RM_S1U_X2_LP"
},{
          "policy_terms": [],"prefix_list": "MPLS-LOOPBACK","action_statements": [
                {
                  "action_value": "","action_statement": ""
                }
              ]
            }
          ],"name": "MPLS-LOOPBACK-RLFA"
        } 
]

我已经尝试过这段代码:

from collections import defaultdict

res1 = defaultdict(list)
for fsm1 in input:
    name1 = fsm1.pop()
    action = fsm1[2]
    action_statement = fsm1[3]
    action_value = fsm1[4]
    item1 = dict(zip(['entry','prefix_list'],fsm1))
    res1['action'] = action
    res1['action_statement'] = action_statement
    res1['action_value'] = action_value
    res1[name].append(item1)

print(res1)

由于我是编码和写作的新手,请帮助我获得上述期望的输出。

nange1988 回答:使用python的嵌套字典

这是最终代码。我先使用setdefault方法对数据进行分组,然后使用简单的for循环以请求的方式表示数据。

# Input
input = [['10','PS_S1U_X2_LP','permit','origin','igp','RM_S1U_X2_LP'],['20','',['10','MPLS-LOOPBACK','MPLS-LOOPBACK-RLFA'],]

# Main code
d = {}
final = []
for i in input:
    d.setdefault(i[-1],[]).append(i[:-1])

for i,v in d.items():
    a = {}
    a["policy_terms"] = []
    a["route_policy_statement"] = [{"entry": j[0],"prefix_list":j[1],"action_statements":[{"action_value":j[-2],"action": j[-4],"action_statement": j[-3]}]} for j in v]
    a["name"] = i
    final.append(a)

final_dict = {"route_policy_list": final} 
print (final_dict)

# Output
# {'route_policy_list': [{'policy_terms': [],'route_policy_statement': [{'entry': '10','prefix_list': 'PS_S1U_X2_LP','action_statements': [{'action_value': 'origin','action': 'PS_S1U_X2_LP','action_statement': 'permit'}]},{'entry': '20','prefix_list': '','action_statements': [{'action_value': '','action': '','action_statement': 'permit'}]}],'name': 'RM_S1U_X2_LP'},{'policy_terms': [],'prefix_list': 'MPLS-LOOPBACK','action': 'MPLS-LOOPBACK','name': 'MPLS-LOOPBACK-RLFA'}]}

我希望这对您有所帮助!

,

似乎input中的每个子列表都包含相同顺序的数据,因此我将创建另一个索引列表,例如

indices = ['entry','prefix_list','action','action_statement','action_value','name']

然后仅对值进行硬编码,因为似乎您想要在特定位置使用特定值。

dic_list = []
for lst in input:
    dic = {'policy terms' : [],'route_policy_statements' : {
               indices[0] : lst[0],indices[1] : lst[1],'action_statements' : {
                   indices[2] : lst[2],indices[3] : lst[3],indices[4] : lst[4]
               },indices[5] : lst[5]
           }
           }

    dic_list.append(dic)
本文链接:https://www.f2er.com/3161051.html

大家都在问