<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
把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'}
使用**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'}
>>> 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'}
利用a.items()的方法把字典拆分成鍵值對元組,然後強制轉換成列表,合併list(a.items())和list(b.items()),並使用dict把合併後的列表轉換成一個新字典
>>> 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')]
>>> dict(list(a.items()) + list(b.items())) {'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco', 'name': 'r1'}
#! /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)
[ { "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" } } ]
#! /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字典合併內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45