繁体   English   中英

如何将字典格式的输出更改为其他格式

[英]How to change the output of a dictionary format in to another

我的字典在下面

    d = {
   "interface": [
      {
         "device": "device1",
         "keyvalue": [
            {
               "id": 1,
               "ipv4-address": "192.168.1.1",
               },
            {
               "id": 2,
               "ipv4-address": "192.168.1.2",
                          }
         ],
         "physical": [
            {
               "id": "1",
               "interface": "0/0"

            },
            {
               "id": "2",
               "interface": "0/1"

            }

         ]
      }
   ]
}

我想要的输出

keys_ipv4_address_1 192.168.1.1 physical_interface_2 0/1

这里keys_ipv4_address_1表示接口['device'] ['keyvalue'] ['id'= 1] ['ipv4-address']

physical_interface_2表示接口['device'] ['id'= 2] ['interface']

我的代码如下

for k,v in d.items():
    #print (v)
    for i in v:
        print (i['keyvalue'][0])
        print (i['physical'][1])

但是我想要不同格式的输出,如何实现。 physical_interface_2一样,先进入physical interface然后进入ID 2

如何使用递归打印来指示要处理的部分,例如

def recursive_print(a, output):
    if type(a) == str:
            print(output, a)
            return
    if type(a) == int:
            print(output, a)
            return
    if type(a) == list:
            for i in a:
                recursive_print(i, output)
            return
    if type(a) == dict:
            for key in a:
                recursive_print(a[key], output + ('_' if output else '') + key)
            return

然后调用recursive_print(d, "")以打印路径:

interface_device device1
interface_keyvalue_id 1
interface_keyvalue_ipv4-address 192.168.1.1
interface_keyvalue_id 2
interface_keyvalue_ipv4-address 192.168.1.2
interface_physical_id 1
interface_physical_interface 0/0
interface_physical_id 2
interface_physical_interface 0/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM