Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用python的嵌套字典_Python 3.x_List_Dictionary - Fatal编程技术网

Python 3.x 使用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'], ] 我想要的结果是

我正在尝试用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'], 
]
我想要的结果是:

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个词典的列表。