如何使用Python实现字典合并
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章给大家分享的是有关如何使用Python实现字典合并的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、用for循环把一个字典合并到另一个字典把a字典合并到b字典中,相
千家信息网最后更新 2025年01月19日如何使用Python实现字典合并
这篇文章给大家分享的是有关如何使用Python实现字典合并的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
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 jsondef 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 osimport sysimport jsonfrom datetime import datetimefrom netmiko import ConnectHandlerfrom concurrent.futures import ThreadPoolExecutor as Pooldef 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实现字典合并"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
字典
设备
输入
方法
格式
文件
路径
信息
内容
数据
更多
目录
篇文章
类型
utf-8
循环
不错
实用
两个
名字
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
河北山东网络时间服务器地址
大学网络技术课心得
嘉赢网络技术
软件开发考试基础知识
百度北京网络技术有限公司
乐山大佛服务器怎么样
如何备份数据库到局域网
最新网安全枕头网络安全
网络技术与
奈飞服务器无法访问
数据库中的记录是由什么组成的
软件开发的一些专业术语
鞍山云服务器租赁
网络安全重大隐患处罚
服务器esxi7.0安装
数据库10g以下
戴尔服务器无图纸维修
镜像代理 网络安全
云南电子发票服务器连接失败
独立服务器租用怎么办
服务器证据
双cpu服务器怎么装系统
服务器 国内便宜
4g软件开发与运用工程
国神集团网络安全技术
运维对服务器管理考核
六安科创网络技术服务有限公司
用友换金蝶基础数据库
湖北浪潮服务器维修调试哪家好
麻将服务器破解