首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在嵌套字典中合并具有相同键的值?(不起作用)

如何在嵌套字典中合并具有相同键的值?(不起作用)
EN

Stack Overflow用户
提问于 2020-08-28 04:58:18
回答 2查看 129关注 0票数 0

首先,我是Python编程的新手,所以非常感谢您的帮助。我在合并来自不同字典的相同键值以使其成为单个键值对时遇到问题。我尝试了这里提供的许多解决方案,但似乎没有一个对我的情况有效。我知道我做错了什么。输出是通过解析两个单独的基于文本的配置得到的。所有这些最终都会出现在同一个巨大的masterDict字典中。我可以更改它,使每个文件生成一个单独的字典,但我希望这是可伸缩的,最多4个嵌套字典。0是第一个文件,1是第二个文件。这是这本词典的摘要版本。

代码语言:javascript
复制
masterDict = {0: {'access': {'interface GigabitEthernet0/1': ' switchport access vlan 532'},
     'description': {'interface GigabitEthernet0/1': ' description Printer'},
     'duplex': {'interface GigabitEthernet0/1': ' duplex half'},
     'speed': {'interface GigabitEthernet0/1': ' speed 10'},
     'trunk': {'interface GigabitEthernet0/1': 'switchport mode trunk'}},
 1: {'access': {'interface GigabitEthernet0/2': ' switchport access vlan 532'},
     'description': {'interface GigabitEthernet0/2': ' description Printer'},
     'duplex': {'interface GigabitEthernet0/2': ' duplex half'},
     'speed': {'interface GigabitEthernet0/2': ' speed 10'},
     'trunk': {'interface GigabitEthernet0/2': 'switchport mode trunk'}}}

我希望最终结果如下所示:

代码语言:javascript
复制
newMasterDict = {0: {'interface GigabitEthernet0/1': [' switchport access vlan 532',
                                      ' description Printer',
                                      ' duplex half',
                                      ' speed 10',
                                      'switchport mode trunk']},
 1: {'newDict': {'interface GigabitEthernet0/2': [' switchport access vlan 532',
                                                  ' description Printer',
                                                  ' duplex half',
                                                  ' speed 10',
                                                  'switchport mode trunk']}}}

请注意,这些关键字不会出现在每个字典中。有人能给我指个方向吗?非常感谢!

下面是masterDict的生成方式:

代码语言:javascript
复制
from ciscoconfparse import CiscoConfParse
from collections import defaultdict
homepath = 'c:/Users/c_eavila/Box/Projects/Environment1/'
pathList = ("testconfig.txt", "testconfig2.txt")
queryList = ('description', 'speed', 'duplex')
swpModes = ("access", "trunk")

masterDict = {}
masterDict2 = {}
for count, path in enumerate(pathList):
  dictList = {}
  loadParse = CiscoConfParse(config=homepath+path , ignore_blank_lines=True, syntax='ios')
  for mode in swpModes:
    if mode == "access":
      parentParse = loadParse.find_parents_w_child(r'^interface', r'switchport mode '+mode)
      accVlanParse = loadParse.find_children_w_parents(r'^interface', r'switchport access vlan')
      accVlanDict = dict(zip(parentParse, accVlanParse))
      dictList['access'] = accVlanDict
    elif mode == "trunk":
      v = 'switchport mode trunk'
      parentParse = loadParse.find_parents_w_child(r'^interface', r'switchport mode '+mode)
      trunkAllowedParse = loadParse.find_children_w_parents(r'^interface', r'switchport trunk allowed')
      if trunkAllowedParse != []:
        trunkAllowedDict = dict(zip(parentParse, trunkAllowedParse))
        trunkDict = dict(zip(parentParse, 'switchport mode trunk',))
        dictList['trunkallowed'] = trunkAllowedDict
        dictList['trunk'] = {k:v for k in trunkDict}
      elif trunkAllowedParse == []:
        trunkDict = dict(zip(parentParse, 'switchport mode trunk',))
        dictList['trunk'] = {k:v for k in trunkDict}
    for query in queryList:
      parentParse = loadParse.find_parents_w_child(r'^interface', query)
      childParse = loadParse.find_children_w_parents(r'^interface', query)
      dictList[query] = dict(zip(parentParse, childParse))
  masterDict[count] = dictList

下面是配置的摘录。您可以随意复制、粘贴并亲自试用它。目标是只拉取查询到的行。

代码语言:javascript
复制
interface GigabitEthernet0/1
 switchport access vlan 532
 switchport mode access
 switchport voice vlan 45
 switchport port-security maximum 50
 switchport port-security
 switchport port-security aging time 5
 switchport port-security aging type inactivity
 auto qos voip cisco-phone 
 spanning-tree portfast
!
interface GigabitEthernet0/2
 switchport access vlan 532
 switchport mode access
 switchport voice vlan 45
 switchport port-security maximum 50
 switchport port-security
 switchport port-security aging time 5
 switchport port-security aging type inactivity
 auto qos voip cisco-phone 
 spanning-tree portfast
!
interface GigabitEthernet0/3
 description UPS
 switchport access vlan 15
 switchport mode access
 switchport voice vlan 45
 switchport port-security maximum 50
 switchport port-security
 switchport port-security aging time 5
 switchport port-security aging type inactivity
 auto qos voip cisco-phone 
 spanning-tree portfast
!
interface GigabitEthernet0/4
 switchport access vlan 532
 switchport mode access
 switchport voice vlan 45
 switchport port-security maximum 50
 switchport port-security
 switchport port-security aging time 5
 switchport port-security aging type inactivity
 auto qos voip cisco-phone 
 spanning-tree portfast
!
interface GigabitEthernet0/5
 description Office 207 port 226a Plotter
 switchport access vlan 50
 switchport mode access
 switchport voice vlan 45
 switchport port-security maximum 50
 switchport port-security
 switchport port-security aging time 5
 switchport port-security aging type inactivity
 speed 10
 duplex full
 auto qos voip cisco-phone 
 spanning-tree portfast
!
interface GigabitEthernet0/6
 switchport access vlan 532
 switchport mode access
 switchport voice vlan 45
 switchport port-security maximum 50
 switchport port-security
 switchport port-security aging time 5
 switchport port-security aging type inactivity
 auto qos voip cisco-phone 
 spanning-tree portfast
!
interface GigabitEthernet0/7
 description Printer Ray Rm 210
 switchport access vlan 50
 switchport mode access
 switchport voice vlan 45
 switchport port-security maximum 50
 switchport port-security
 switchport port-security aging time 5
 switchport port-security aging type inactivity
 auto qos voip cisco-phone 
 spanning-tree portfast
!
interface GigabitEthernet0/8
 switchport access vlan 532
 switchport mode access
 switchport voice vlan 45
 switchport port-security maximum 50
 switchport port-security
 switchport port-security aging time 5
 switchport port-security aging type inactivity
 auto qos voip cisco-phone 
 spanning-tree portfast

编辑:我想对@GhandiFloss和@JoshuaSundance的帮助表示非常感谢。@GhandiFloss的解决方案似乎适用于我在上面发布的总结字典。然而,它不适用于我的整个字典。我正在尝试调整代码,使其有效。再次强调,任何指向正确方向的点都将非常感谢!这里是完整的结论:注意,它可能是从两个几乎相同的配置生成的字典的两倍。我希望能够做到最多4个。

代码语言:javascript
复制
masterDict = {0: {'access': {'interface GigabitEthernet0/1': ' switchport access vlan 532',
                'interface GigabitEthernet0/10': ' switchport access vlan 532',
                'interface GigabitEthernet0/11': ' switchport access vlan 532',
                'interface GigabitEthernet0/12': ' switchport access vlan 532',
                'interface GigabitEthernet0/13': ' switchport access vlan 50',
                'interface GigabitEthernet0/14': ' switchport access vlan 50',
                'interface GigabitEthernet0/15': ' switchport access vlan 532',
                'interface GigabitEthernet0/16': ' switchport access vlan 532',
                'interface GigabitEthernet0/17': ' switchport access vlan 532',
                'interface GigabitEthernet0/18': ' switchport access vlan 50',
                'interface GigabitEthernet0/19': ' switchport access vlan 532',
                'interface GigabitEthernet0/2': ' switchport access vlan 532',
                'interface GigabitEthernet0/20': ' switchport access vlan 50',
                'interface GigabitEthernet0/21': ' switchport access vlan 532',
                'interface GigabitEthernet0/22': ' switchport access vlan 532',
                'interface GigabitEthernet0/23': ' switchport access vlan 532',
                'interface GigabitEthernet0/24': ' switchport access vlan 598',
                'interface GigabitEthernet0/25': ' switchport access vlan 50',
                'interface GigabitEthernet0/26': ' switchport access vlan 64',
                'interface GigabitEthernet0/27': ' switchport access vlan 64',
                'interface GigabitEthernet0/28': ' switchport access vlan 64',
                'interface GigabitEthernet0/29': ' switchport access vlan 50',
                'interface GigabitEthernet0/3': ' switchport access vlan 15',
                'interface GigabitEthernet0/30': ' switchport access vlan 532',
                'interface GigabitEthernet0/31': ' switchport access vlan 50',
                'interface GigabitEthernet0/32': ' switchport access vlan 532',
                'interface GigabitEthernet0/33': ' switchport access vlan 532',
                'interface GigabitEthernet0/34': ' switchport access vlan 50',
                'interface GigabitEthernet0/35': ' switchport access vlan 50',
                'interface GigabitEthernet0/36': ' switchport access vlan 64',
                'interface GigabitEthernet0/37': ' switchport access vlan 64',
                'interface GigabitEthernet0/38': ' switchport access vlan 532',
                'interface GigabitEthernet0/39': ' switchport access vlan 532',
                'interface GigabitEthernet0/4': ' switchport access vlan 532',
                'interface GigabitEthernet0/40': ' switchport access vlan 50',
                'interface GigabitEthernet0/41': ' switchport access vlan 50',
                'interface GigabitEthernet0/42': ' switchport access vlan 50',
                'interface GigabitEthernet0/43': ' switchport access vlan 532',
                'interface GigabitEthernet0/44': ' switchport access vlan 50',
                'interface GigabitEthernet0/45': ' switchport access vlan 50',
                'interface GigabitEthernet0/46': ' switchport access vlan 532',
                'interface GigabitEthernet0/47': ' switchport access vlan 532',
                'interface GigabitEthernet0/48': ' switchport access vlan 532',
                'interface GigabitEthernet0/5': ' switchport access vlan 50',
                'interface GigabitEthernet0/6': ' switchport access vlan 532',
                'interface GigabitEthernet0/7': ' switchport access vlan 50',
                'interface GigabitEthernet0/8': ' switchport access vlan 532',
                'interface GigabitEthernet0/9': ' switchport access vlan 50'},
     'description': {'interface GigabitEthernet0/13': ' description Printer',
                     'interface GigabitEthernet0/14': ' description Printer '
                                                      '216',
                     'interface GigabitEthernet0/17': ' description bpdu '
                                                      '8-19-20 cp',
                     'interface GigabitEthernet0/18': ' description FMA 200A '
                                                      'Printer',
                     'interface GigabitEthernet0/20': ' description Printer '
                                                      '209',
                     'interface GigabitEthernet0/24': ' description Wireless',
                     'interface GigabitEthernet0/25': ' description Printer',
                     'interface GigabitEthernet0/26': ' description Camera',
                     'interface GigabitEthernet0/27': ' description Camera',
                     'interface GigabitEthernet0/28': ' description Camera',
                     'interface GigabitEthernet0/3': ' description UPS',
                     'interface GigabitEthernet0/35': ' description FMA '
                                                      'Printer 204',
                     'interface GigabitEthernet0/36': ' description Camera',
                     'interface GigabitEthernet0/37': ' description Camera',
                     'interface GigabitEthernet0/40': ' description Printer',
                     'interface GigabitEthernet0/41': ' description Printer',
                     'interface GigabitEthernet0/45': ' description Printer',
                     'interface GigabitEthernet0/5': ' description Office 207 '
                                                     'port 226a Plotter',
                     'interface GigabitEthernet0/51': ' description trunktest',
                     'interface GigabitEthernet0/7': ' description Printer Ray '
                                                     'Rm 210',
                     'interface GigabitEthernet0/9': ' description Printer 213',
                     'interface Vlan1000': ' description Management VLAN'},
     'duplex': {'interface GigabitEthernet0/36': ' duplex half',
                'interface GigabitEthernet0/5': ' duplex full',
                'interface GigabitEthernet0/51': ' duplex full'},
     'speed': {'interface GigabitEthernet0/36': ' speed 10',
               'interface GigabitEthernet0/5': ' speed 10',
               'interface GigabitEthernet0/51': ' speed 100'},
     'trunk': {'interface GigabitEthernet0/49': ' switchport mode trunk',
               'interface GigabitEthernet0/50': ' switchport mode trunk',
               'interface GigabitEthernet0/51': ' switchport mode trunk'},
     'trunkallowed': {'interface GigabitEthernet0/49': ' switchport trunk '
                                                       'allowed vlan 50'}},
 1: {'access': {'interface GigabitEthernet0/1': ' switchport access vlan 532',
                'interface GigabitEthernet0/10': ' switchport access vlan 532',
                'interface GigabitEthernet0/11': ' switchport access vlan 532',
                'interface GigabitEthernet0/12': ' switchport access vlan 532',
                'interface GigabitEthernet0/13': ' switchport access vlan 50',
                'interface GigabitEthernet0/14': ' switchport access vlan 50',
                'interface GigabitEthernet0/15': ' switchport access vlan 532',
                'interface GigabitEthernet0/16': ' switchport access vlan 532',
                'interface GigabitEthernet0/17': ' switchport access vlan 532',
                'interface GigabitEthernet0/18': ' switchport access vlan 50',
                'interface GigabitEthernet0/19': ' switchport access vlan 532',
                'interface GigabitEthernet0/2': ' switchport access vlan 532',
                'interface GigabitEthernet0/20': ' switchport access vlan 50',
                'interface GigabitEthernet0/21': ' switchport access vlan 532',
                'interface GigabitEthernet0/22': ' switchport access vlan 532',
                'interface GigabitEthernet0/23': ' switchport access vlan 532',
                'interface GigabitEthernet0/24': ' switchport access vlan 598',
                'interface GigabitEthernet0/25': ' switchport access vlan 50',
                'interface GigabitEthernet0/26': ' switchport access vlan 64',
                'interface GigabitEthernet0/27': ' switchport access vlan 64',
                'interface GigabitEthernet0/28': ' switchport access vlan 64',
                'interface GigabitEthernet0/29': ' switchport access vlan 50',
                'interface GigabitEthernet0/3': ' switchport access vlan 15',
                'interface GigabitEthernet0/30': ' switchport access vlan 532',
                'interface GigabitEthernet0/31': ' switchport access vlan 50',
                'interface GigabitEthernet0/32': ' switchport access vlan 532',
                'interface GigabitEthernet0/33': ' switchport access vlan 532',
                'interface GigabitEthernet0/34': ' switchport access vlan 50',
                'interface GigabitEthernet0/35': ' switchport access vlan 50',
                'interface GigabitEthernet0/36': ' switchport access vlan 64',
                'interface GigabitEthernet0/37': ' switchport access vlan 64',
                'interface GigabitEthernet0/38': ' switchport access vlan 532',
                'interface GigabitEthernet0/39': ' switchport access vlan 532',
                'interface GigabitEthernet0/4': ' switchport access vlan 532',
                'interface GigabitEthernet0/40': ' switchport access vlan 50',
                'interface GigabitEthernet0/41': ' switchport access vlan 50',
                'interface GigabitEthernet0/42': ' switchport access vlan 50',
                'interface GigabitEthernet0/43': ' switchport access vlan 532',
                'interface GigabitEthernet0/44': ' switchport access vlan 50',
                'interface GigabitEthernet0/45': ' switchport access vlan 50',
                'interface GigabitEthernet0/46': ' switchport access vlan 532',
                'interface GigabitEthernet0/47': ' switchport access vlan 532',
                'interface GigabitEthernet0/48': ' switchport access vlan 532',
                'interface GigabitEthernet0/5': ' switchport access vlan 50',
                'interface GigabitEthernet0/6': ' switchport access vlan 532',
                'interface GigabitEthernet0/7': ' switchport access vlan 50',
                'interface GigabitEthernet0/8': ' switchport access vlan 532',
                'interface GigabitEthernet0/9': ' switchport access vlan 50'},
     'description': {'interface GigabitEthernet0/13': ' description Printer',
                     'interface GigabitEthernet0/14': ' description Printer '
                                                      '216',
                     'interface GigabitEthernet0/17': ' description bpdu '
                                                      '8-19-20 cp',
                     'interface GigabitEthernet0/18': ' description FMA 200A '
                                                      'Printer',
                     'interface GigabitEthernet0/20': ' description Printer '
                                                      '209',
                     'interface GigabitEthernet0/24': ' description Wireless',
                     'interface GigabitEthernet0/25': ' description Printer',
                     'interface GigabitEthernet0/26': ' description Camera',
                     'interface GigabitEthernet0/27': ' description Camera',
                     'interface GigabitEthernet0/28': ' description Camera',
                     'interface GigabitEthernet0/3': ' description UPS',
                     'interface GigabitEthernet0/35': ' description FMA '
                                                      'Printer 204',
                     'interface GigabitEthernet0/36': ' description Camera',
                     'interface GigabitEthernet0/37': ' description Camera',
                     'interface GigabitEthernet0/40': ' description Printer',
                     'interface GigabitEthernet0/41': ' description Printer',
                     'interface GigabitEthernet0/45': ' description Printer',
                     'interface GigabitEthernet0/5': ' description Office 207 '
                                                     'port 226a Plotter',
                     'interface GigabitEthernet0/51': ' description trunktest',
                     'interface GigabitEthernet0/7': ' description Printer Ray '
                                                     'Rm 210',
                     'interface GigabitEthernet0/9': ' description Printer 213',
                     'interface Vlan1000': ' description Management VLAN'},
     'duplex': {'interface GigabitEthernet0/36': ' duplex half',
                'interface GigabitEthernet0/5': ' duplex full',
                'interface GigabitEthernet0/51': ' duplex full'},
     'speed': {'interface GigabitEthernet0/36': ' speed 10',
               'interface GigabitEthernet0/5': ' speed 10',
               'interface GigabitEthernet0/51': ' speed 100'},
     'trunk': {'interface GigabitEthernet0/49': ' switchport mode trunk',
               'interface GigabitEthernet0/50': ' switchport mode trunk',
               'interface GigabitEthernet0/51': ' switchport mode trunk'}}}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-28 05:39:38

这适用于你发布的大量的判决书。正如我所说,这是一个混乱,需要一些工作,但它应该会有所帮助。这花了我一段时间,但它让我很恼火,所以我想完成它!

代码语言:javascript
复制
def seperate_dicts(dicts):
  dict_list = []
  keys = list(dicts.keys())
  for key in keys:
    new_dict = {}
    new_dict[key] = dicts[key]
    dict_list.append(new_dict)
    new_dict = {}
  return dict_list


def get_attribs(dict_list):
  new_main = {}
  key = list(dict_list[0].keys())[0]
  new_main['newDict'] = dict_list[0][key]
  for i in range(1, len(dict_list)):
    other_key = list(dict_list[i].keys())[0]
    other_keys = list(dict_list[i][other_key])
    for key2 in other_keys:
      if key2 not in new_main['newDict']:
        new_main['newDict'][key2] = dict_list[i][other_key][key2]
      elif isinstance(new_main['newDict'][key2], list):
        new_main['newDict'][key2].append(dict_list[i][other_key][key2])
      else:
        new_main['newDict'][key2] = [
            new_main['newDict'][key2], dict_list[i][other_key][key2]]
  return new_main

new_master = {}

for i in range(len(masterDict)):
  dict_list = seperate_dicts(masterDict[i])
  res = get_attribs(dict_list)
  new_master[i] = res

print(new_master)
票数 0
EN

Stack Overflow用户

发布于 2020-08-28 05:57:09

(编辑):在查看了您的评论并更多地考虑了您的需求后,如何更多地像这样?

代码语言:javascript
复制
# ls will be a list of dicts where each dict represents an interface
ls = []

# testconf is the configuration file from your question
# split it into chunks seperated by the exclamation points
for i in testconf.split('!'):
    d = {}
    # split each chunk into lines
    for l in i.split('\n'):
        l = l.strip()
        if l != '':
            for s in ['interface', 'switchport mode', 'description', 'speed', 'duplex']:
                # if the line starts with the word
                if l.startswith(s):
                    # if the word is already in d
                    if s in d.keys():
                        # if it's not a list
                        if not type(d[s])==list:
                            d[s] = [d[s], l.replace(s,'').strip()]
                        else:
                        # if it is a list
                            d[s].append(l.replace(s,'').strip())
                    # if the word is not already in d
                    else:
                            d[s] = l.replace(s,'').strip()
    # add d to ls
    ls.append(d)
    
access = [d for d in ls if 'access' in list(d.values())]
trunk = [d for d in ls if 'trunk' in list(d.values())]

print(trunk)
print('\n\n\n')
print(access)

输出:

代码语言:javascript
复制
[{'interface': 'GigabitEthernet0/49', 'switchport mode': 'trunk'},
 {'interface': 'GigabitEthernet0/50', 'switchport mode': 'trunk'},
 {'description': 'trunktest',
  'duplex': 'full',
  'interface': 'GigabitEthernet0/51',
  'speed': '100',
  'switchport mode': 'trunk'}]




[{'interface': 'GigabitEthernet0/1', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/2', 'switchport mode': 'access'},
 {'description': 'UPS',
  'interface': 'GigabitEthernet0/3',
  'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/4', 'switchport mode': 'access'},
 {'description': 'Office 207 port 226a Plotter',
  'duplex': 'full',
  'interface': 'GigabitEthernet0/5',
  'speed': '10',
  'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/6', 'switchport mode': 'access'},
 {'description': 'Printer Ray Rm 210',
  'interface': 'GigabitEthernet0/7',
  'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/8', 'switchport mode': 'access'},
 {'description': 'Printer 213',
  'interface': 'GigabitEthernet0/9',
  'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/10', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/11', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/12', 'switchport mode': 'access'},
 {'description': 'Printer',
  'interface': 'GigabitEthernet0/13',
  'switchport mode': 'access'},
 {'description': 'Printer 216',
  'interface': 'GigabitEthernet0/14',
  'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/15', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/16', 'switchport mode': 'access'},
 {'description': 'bpdu 8-19-20 cp',
  'interface': 'GigabitEthernet0/17',
  'switchport mode': 'access'},
 {'description': 'FMA 200A Printer',
  'interface': 'GigabitEthernet0/18',
  'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/19', 'switchport mode': 'access'},
 {'description': 'Printer 209',
  'interface': 'GigabitEthernet0/20',
  'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/21', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/22', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/23', 'switchport mode': 'access'},
 {'description': 'Wireless',
  'interface': 'GigabitEthernet0/24',
  'switchport mode': 'access'},
 {'description': 'Printer',
  'interface': 'GigabitEthernet0/25',
  'switchport mode': 'access'},
 {'description': 'Camera',
  'interface': 'GigabitEthernet0/26',
  'switchport mode': 'access'},
 {'description': 'Camera',
  'interface': 'GigabitEthernet0/27',
  'switchport mode': 'access'},
 {'description': 'Camera',
  'interface': 'GigabitEthernet0/28',
  'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/29', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/30', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/31', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/32', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/33', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/34', 'switchport mode': 'access'},
 {'description': 'FMA Printer 204',
  'interface': 'GigabitEthernet0/35',
  'switchport mode': 'access'},
 {'description': 'Camera',
  'duplex': 'half',
  'interface': 'GigabitEthernet0/36',
  'speed': '10',
  'switchport mode': 'access'},
 {'description': 'Camera',
  'interface': 'GigabitEthernet0/37',
  'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/38', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/39', 'switchport mode': 'access'},
 {'description': 'Printer',
  'interface': 'GigabitEthernet0/40',
  'switchport mode': 'access'},
 {'description': 'Printer',
  'interface': 'GigabitEthernet0/41',
  'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/42', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/43', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/44', 'switchport mode': 'access'},
 {'description': 'Printer',
  'interface': 'GigabitEthernet0/45',
  'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/46', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/47', 'switchport mode': 'access'},
 {'interface': 'GigabitEthernet0/48', 'switchport mode': 'access'}]

(老帖子):我不确定你到底想要什么,因为你想要的最终结果包含语法错误。作为一个起点,这样的东西怎么样?

代码语言:javascript
复制
def newd(d):
    nk = list(list(d.values())[0].keys())[0]
    nd = {}
    nd['interface'] = nk.replace('interface ','').strip()
    for k,v in d.items():
        nd[k] = v[nk].replace(k,'').strip()
    return nd

{k:newd(v) for k,v in masterDict.items()}

输出:

代码语言:javascript
复制
{0: {'access': 'switchport  vlan 532',
     'description': 'Printer',
     'duplex': 'half',
     'interface': 'GigabitEthernet0/1',
     'speed': '10',
     'trunk': 'switchport mode'},
 1: {'access': 'switchport  vlan 532',
     'description': 'Printer',
     'duplex': 'half',
     'interface': 'GigabitEthernet0/2',
     'speed': '10',
     'trunk': 'switchport mode'}}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63624087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档