详解Python实现字典合并的四种方法

目录
  • 1、用for循环把一个字典合并到另一个字典
  • 2、用dict(b, **a)方法构造一个新字典
  • 3、用b.update(a)的方法,更新字典
  • 4、把字典转换成列表合并后,再转换成字典
    • (1)利用a.items()、b.items()把a、b两个字典转换成元组键值对列表
    • (2)合并列表并且把合并后的列表转换成字典
  • 5、实例,netmiko使用json格式的数据进行自动化操作
    • (1)json格式的处理
    • (2)json格式的设备信息列表
    • (3)netmiko读取json类型信息示例

1、用for循环把一个字典合并到另一个字典

把a字典合并到b字典中,相当于用for循环遍历a字典,然后取出a字典的键值对,放进b字典,这种方法python中进行了简化,封装成b.update(a)实现

>>> a = {'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco'}
>>> b = {'name': 'r1'}
>>> for k, v in a.items():
...     b[k] =  v
...
>>> a
{'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco'}
>>> b
{'name': 'r1', 'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco'}

2、用dict(b, **a)方法构造一个新字典

使用**a的方法,可以快速的打开字典a的数据,可以使用这个方法来构造一个新的字典

>>> a = {'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco'}
>>> b = {'name': 'r1'}
>>> c = dict(b, **a)
>>> c
{'name': 'r1', 'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco'}
>>> a
{'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco'}
>>> b
{'name': 'r1'}

3、用b.update(a)的方法,更新字典

>>> a = {'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco'}
>>> b = {'name': 'r1'}
>>> b.update(a)
>>> a
{'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco'}
>>> b
{'name': 'r1', 'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco'}

4、把字典转换成列表合并后,再转换成字典

利用a.items()的方法把字典拆分成键值对元组,然后强制转换成列表,合并list(a.items())和list(b.items()),并使用dict把合并后的列表转换成一个新字典

(1)利用a.items()、b.items()把a、b两个字典转换成元组键值对列表

>>> a = {'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco'}
>>> b = {'name': 'r1'}
>>> a.items()
dict_items([('device_type', 'cisco_ios'), ('username', 'admin'), ('password', 'cisco')])
>>> b.items()
dict_items([('name', 'r1')])
>>> list(a.items())
[('device_type', 'cisco_ios'), ('username', 'admin'), ('password', 'cisco')]
>>> list(b.items())
[('name', 'r1')]

(2)合并列表并且把合并后的列表转换成字典

>>> dict(list(a.items()) + list(b.items()))
{'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco', 'name': 'r1'}

5、实例,netmiko使用json格式的数据进行自动化操作

(1)json格式的处理

#! /usr/bin/env python3
# _*_ coding: utf-8 _*_
import json
​
def creat_net_device_info(net_name, device, hostname, user, passwd):
   dict_device_info = {
                       'device_type': device,
                       'ip': hostname,
                       'username': user,
                       'password': passwd
                      }
   dict_connection = {'connect': dict_device_info}
   dict_net_name = {'name': net_name}
   data = dict(dict_net_name, **dict_connection)
   data = json.dumps(data)
   return print(f'生成的json列表如下:\n{data}')
​
​
if __name__ == '__main__':
   net_name = input('输入网络设备名称R1或者SW1的形式:')
   device = input('输入设备类型cisco_ios/huawei: ')
   hostname = input('输入管理IP地址: ')
   user = input('输入设备登录用户名: ')
   passwd = input('输入设备密码: ')
   json_founc = creat_net_device_info
   json_founc(net_name, device, hostname, user, passwd)

(2)json格式的设备信息列表

[
  {
       "name": "R1",
       "connect":{
           "device_type": "cisco_ios",
           "ip": "192.168.47.10",
           "username": "admin",
           "password": "cisco"
      }
  },
  {
       "name": "R2",
       "connect":{
           "device_type": "cisco_ios",
           "ip": "192.168.47.20",
           "username": "admin",
           "password": "cisco"
      }
  },
  {
       "name": "R3",
       "connect":{
           "device_type": "cisco_ios",
           "ip": "192.168.47.30",
           "username": "admin",
           "password": "cisco"
      }
  },
  {
       "name": "R4",
       "connect":{
           "device_type": "cisco_ios",
           "ip": "192.168.47.40",
           "username": "admin",
           "password": "cisco"
      }
  },
  {
       "name": "R5",
       "connect":{
           "device_type": "cisco_ios",
           "ip": "192.168.47.50",
           "username": "admin",
           "password": "cisco"
      }
  }
]

(3)netmiko读取json类型信息示例

#! /usr/bin/env python3
# _*_ coding: utf-8 _*_
​
import os
import sys
import json
from datetime import datetime
from netmiko import ConnectHandler
from concurrent.futures import ThreadPoolExecutor as Pool
​
def write_config_file(filename, config_list):
   with open(filename, 'w+') as f:
       for config in config_list:
           f.write(config)
​
def auto_config(net_dev_info, config_file):
   ssh_client = ConnectHandler(**net_dev_info['connect']) #把json格式的字典传入
   hostname = net_dev_info['name']
   hostips = net_dev_info['connect']
   hostip = hostips['ip']
   print('login ' + hostname + ' success !')
   output = ssh_client.send_config_from_file(config_file)
   file_name = f'{hostname} + {hostip}.txt'
   print(output)
   write_config_file(file_name, output)

def main(net_info_file_path, net_eveng_config_path):
   this_time = datetime.now()
   this_time = this_time.strftime('%F %H-%M-%S')
   foldername = this_time
   old_folder_name = os.path.exists(foldername)
   if old_folder_name == True:
       print('文件夹名字冲突,程序终止\n')
       sys.exit()
   else:
       os.mkdir(foldername)
       print(f'正在创建目录 {foldername}')
       os.chdir(foldername)
       print(f'进入目录 {foldername}')
​
   net_configs = []
​
   with open(net_info_file_path, 'r') as f:
       devices = json.load(f) #载入一个json格式的列表,json.load必须传入一个别表
​
   with open(net_eveng_config_path, 'r') as config_path_list:
       for config_path in config_path_list:
           config_path = config_path.strip()
           net_configs.append(config_path)
​
   with Pool(max_workers=6) as t:
       for device, net_config in zip(devices, net_configs):
           task = t.submit(auto_config, device, net_config)
       print(task.result())
​
​
if __name__ == '__main__':
   #net_info_file_path = '~/net_dev_info.json'
   #net_eveng_config_path = '~/eve_config_path.txt'
   net_info_file_path = input('请输入设备json_inventory文件路径: ')
   net_eveng_config_path = input('请输入记录设备config路径的配置文件路径: ')
   main(net_info_file_path, net_eveng_config_path)

到此这篇关于详解Python实现字典合并的四种方法的文章就介绍到这了,更多相关Python字典合并内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python如何合并多个字典或映射

    问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作,比如查找值或者检查某些键是否存在. 解决方案 加入你有如下两个字典: a = {'x': 1, 'z': 3 } b = {'y': 2, 'z': 4 } 现在假设你必须在两个字典中执行查找操作(比如先从a中找,如果找不到再在b中找).一个非常简单扼解决方案就是使用collections模块中的ChainMap类.比如: from collections import ChainMap c = ChainMap

  • Python中字典(dict)合并的四种方法总结

    本文主要给大家介绍了关于Python中字典(dict)合并的四种方法,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍: 字典是Python语言中唯一的映射类型. 映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表. 字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型. 字典类型与序列类型的区别: 1. 存取和访问数据的方式不同. 2. 序列类型只用数字类型的键(从序列的开始按数值顺序索引

  • Python实现合并字典的方法

    本文实例讲述了Python实现合并字典的方法.分享给大家供大家参考.具体实现方法如下: # 将两个字典合并 #!/usr/bin/python def adddict(dict1,dict2): xin = {} for key in dict1.keys(): xin[key] = dict1[key] for key in dict2.keys(): xin[key] = dict2[key] return xin s1 = {1:222,'c':'d','e':'f'} s2 = {2:3

  • Python中实现两个字典(dict)合并的方法

    本文实例讲述了Python中实现两个字典(dict)合并的方法,分享给大家供大家参考.具体方法如下: 现有两个字典dict如下: dict1={1:[1,11,111],2:[2,22,222]} dict2={3:[3,33,333],4:[4,44,444]} 合并两个字典得到类似: {1:[1,11,111],2:[2,22,222],3:[3,33,333],4:[4,44,444]} 方法1: dictMerged1=dict(dict1.items()+dict2.items())

  • 详解Python 合并字典

    目录 实例 1 : 使用 update() 方法,第二个参数合并第一个参数 实例 2 : 使用 **,函数将参数以字典的形式导入 总结 给定一个字典,然后计算它们所有数字值的和. 实例 1 : 使用 update() 方法,第二个参数合并第一个参数 def Merge(dict1, dict2): return(dict2.update(dict1)) # 两个字典 dict1 = {'a': 10, 'b': 8} dict2 = {'d': 6, 'c': 4} # 返回 None prin

  • 详解Python实现字典合并的四种方法

    目录 1.用for循环把一个字典合并到另一个字典 2.用dict(b, **a)方法构造一个新字典 3.用b.update(a)的方法,更新字典 4.把字典转换成列表合并后,再转换成字典 (1)利用a.items().b.items()把a.b两个字典转换成元组键值对列表 (2)合并列表并且把合并后的列表转换成字典 5.实例,netmiko使用json格式的数据进行自动化操作 (1)json格式的处理 (2)json格式的设备信息列表 (3)netmiko读取json类型信息示例 1.用for循

  • 详解Python实现图像分割增强的两种方法

    方法一 import random import numpy as np from PIL import Image, ImageOps, ImageFilter from skimage.filters import gaussian import torch import math import numbers import random class RandomVerticalFlip(object): def __call__(self, img): if random.random()

  • 详解python的字典及相关操作

    目录 什么是字典 创建一个字典 在原有字典上添加“键-值”对 修改字典中的值 删除键-值对 由类似对象组成的字典 遍历字典 什么是字典 字典是Python中最强大的数据类型之一,也是Python语言中唯一的映射类型.映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表,字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型. 字典类型与序列类型的区别:1.存取和访问数据的方式不同.2.序列类型只用数字类

  • 详解Python中for循环的定义迭代方法

    目录 Python的 for 循环 遍历字典 range()功能 break语句 和continue语句 else语句 Python的 for 循环 Python 是基于集合的迭代. for <var> in <iterable>: # <iterable>是对象的集合--例如,列表或元组. <statement(s)> # 循环体 a = ['曹操', '孫権', '劉備'] for i in a: print(i) 输出: 曹操孫権劉備 可迭代对象 ,可

  • 一文详解Python中实现单例模式的几种常见方式

    目录 Python 中实现单例模式的几种常见方式 元类(Metaclass): 装饰器(Decorator): 模块(Module): new 方法: Python 中实现单例模式的几种常见方式 元类(Metaclass): class SingletonType(type): """ 单例元类.用于将普通类转换为单例类. """ _instances = {} # 存储单例实例的字典 def __call__(cls, *args, **kwa

  • 详解python中executemany和序列的使用方法

    详解python中executemany和序列的使用方法 一 代码 import sqlite3 persons=[ ("Jim","Green"), ("Hu","jie") ] conn=sqlite3.connect(":memory:") conn.execute("CREATE TABLE person(firstname,lastname)") conn.executeman

  • 详解Python中list[::-1]的几种用法

    本文主要介绍了Python中list[::-1]的几种用法,分享给大家,具体如下: s = "abcde" list的[]中有三个参数,用冒号分割 list[param1:param2:param3] param1,相当于start_index,可以为空,默认是0 param2,相当于end_index,可以为空,默认是list.size param3,步长,默认为1.步长为-1时,返回倒序原序列 举例说明 param1 = -1,只有一个参数,作用是通过下标访问数据,-1为倒数第一个

  • 详解Mybatis多参数传递入参四种处理方式

    1.利用参数出现的顺序 利用mapper.xml <select id="MutiParameter" resultType="com.jt.mybatis.entity.User"> select * from user where id = #{param1} and username = #{param2} </select> 利用mybatis注解方式(sql语句比较简单时推荐此方式) @Select("select * f

  • Python之字典添加元素的几种方法

    本文使用的代码 book_dict = {"price": 500, "bookName": "Python设计", "weight": "250g"} 第一种方式:使用[] book_dict["owner"] = "tyson" 说明:中括号指定key,赋值一个value,key不存在,则是添加元素(如果key已存在,则是修改key对应的value) 第二种方式:

随机推荐