Python 3.x 使用python的嵌套字典
我正在尝试用python编写嵌套类型的字典。我提供了我的输入和预期的输出以及我的代码 这是我的意见:Python 3.x 使用python的嵌套字典,python-3.x,list,dictionary,Python 3.x,List,Dictionary,我正在尝试用python编写嵌套类型的字典。我提供了我的输入和预期的输出以及我的代码 这是我的意见: input = [['10', 'PS_S1U_X2_LP', 'permit', 'origin', 'igp', 'RM_S1U_X2_LP'], ['20', '', 'permit', '', '', 'RM_S1U_X2_LP'], ['10', 'MPLS-LOOPBACK', 'permit', '', '', 'MPLS-LOOPBACK-RLFA'], ] 我想要的结果是
input = [['10', 'PS_S1U_X2_LP', 'permit', 'origin', 'igp', 'RM_S1U_X2_LP'],
['20', '', 'permit', '', '', 'RM_S1U_X2_LP'],
['10', 'MPLS-LOOPBACK', 'permit', '', '', '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": "permit",
"action_statement": ""
}
]
}
],
"name": "RM_S1U_X2_LP"
},
{
"policy_terms": [],
"route_policy_statement": [
{
"entry": "10",
"prefix_list": "MPLS-LOOPBACK",
"action_statements": [
{
"action_value": "",
"action": "permit",
"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)
请帮助我获得如上所述的所需输出,因为我不熟悉编码,并且很难编写。似乎
输入中的每个子列表都包含相同顺序的数据,因此我将创建另一个索引列表,例如
索引=['entry'、'prefix_list'、'action'、'action_statement'、'action_value'、'name']
然后对这些值进行硬编码,因为您似乎希望在特定的位置使用特定的值
dic_list=[]
对于输入中的lst:
dic={‘保单条款’:[],
“路线政策声明”:{
指数[0]:lst[0],
指数[1]:lst[1],
“行动声明”:{
指数[2]:lst[2],
指数[3]:lst[3],
指数[4]:lst[4]
},
指数[5]:lst[5]
}
}
dic_列表追加(dic)
这是最后的代码。我首先使用setdefault方法对数据进行分组,然后使用simpleforloop以请求的方式表示数据
# Input
input = [['10', 'PS_S1U_X2_LP', 'permit', 'origin', 'igp', 'RM_S1U_X2_LP'],
['20', '', 'permit', '', '', 'RM_S1U_X2_LP'],
['10', 'MPLS-LOOPBACK', 'permit', '', '', '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': [], 'route_policy_statement': [{'entry': '10', 'prefix_list': 'MPLS-LOOPBACK', 'action_statements': [{'action_value': '', 'action': 'MPLS-LOOPBACK', 'action_statement': 'permit'}]}], 'name': 'MPLS-LOOPBACK-RLFA'}]}
我希望这对你有帮助,有价值 你写的那个函数的结果是什么?我想这里有一个小缺口。您没有按名称(每个内部列表的最后一个字段)对数据进行分组。原始列表中没有真正分组的内容,您只有3个列表,每个列表中的最后一项都是指定的“名称”,因此我只是这样说。我想我无法正确提问。如果看到预期输出,则3个列表按-->1分组为2<代码>“名称”:“RM\U S1U\U X2\U LP”
和2<代码>“名称”:“MPLS-LOOPBACK-RLFA”。您的结果有一个包含3个词典的列表。