#!usr/bin/env python
# -*- coding:utf-8 -*- # 数据库中原有
old_dict = {
"#1": {'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80},
"#2": {'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80},
"#3": {'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80}
} # cmdb 新汇报的数据
new_dict = {
"#1": {'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 800},
"#3": {'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80},
"#4": {'hostname': 'c2', 'cpu_count': 2, 'mem_capicity': 80}
} # 需要删除:?
# 需要新建:?
# 需要更新:?
# 注意:无需考虑内部元素是否改变,只要原来存在,新汇报也存在,就是需要更新
oldkeys = set(old_dict)
newkeys = set(new_dict)
diferent_key_old = oldkeys.difference(newkeys) #老的里面有,新的里面没有,则删除老的里面
for i in diferent_key_old:
old_dict.pop(i)
print(old_dict) #删除后的字典
diferent_key_new = newkeys.difference(oldkeys) #新的里面有,老的里面没有,则添加到老的里面
for i in diferent_key_new:
old_dict[i] = new_dict[i]
print(old_dict) #添加后的字典
intersection_key = newkeys.intersection(oldkeys) #新的和老的交集
for i in intersection_key:
old_dict[i].update(new_dict[i])
print(old_dict) #同key修改后的字典
#!usr/bin/env python
# -*- coding:utf-8 -*-
#1、简述函数普通参数、指定参数、默认参数、动态参数的区别
#1)普通参数
#定义函数:
def Function_Name(parameter1,parameter2): #形参
pass
#调用函数:
#不指定形参调用时,提供的参数必须与形参数量和顺序一致,否则会报错
Function_Name("parameter1","parameter2") #实参 #2)指定参数
#指定参数调用,提供的参数用形参=实参的方式,可以改变参数的顺序调用
Function_Name(parameter2="parameter2",parameter1="parameter1") #3)默认参数
#定义函数:
#默认参数定义时,必须将默认的参数放置在最后
def Function_Name(parameter1,parameter2="parameter2"): #形参
pass
#默认参数调用可以省略,定义函数时默认了的参数,函数自动会默认定义的默认值
Function_Name("parameter1") #传parameter1,parameter2
#默认参数如果不省略,则传参时会用指定的参数覆盖默认参数
Function_Name("parameter1","parameter3") #传parameter1,parameter3 #4)动态参数
#######定义函数
#1)在形参数前面加*,普通调用实际传值时会将逗号分隔的参数以元组的形式传到函数内部,例如:参数为:11,22,33,[1,2,3]
#传到函数内部为元组:(11,22,33,[1,2,3])
#命名潜规则用 args
def Function_Name(*args):
#2)在形参数前面加**,普通调用实际传值时会将键值对以字典的形式传到函数内部,例如:参数为:key1=123,key2=456
#传到函数内部为字典:{"key1":123,"key2":456}
#命名潜规则用kwargs
def Function_Name(**kwargs):
#######调用函数(特殊调用)
#1)在实参前面加*,表示会将会将元组,列表,字典中的可迭代的对象,循环加入元组,例如:
def Function_Name(*args):
print(kwargs)
Function_Name(*[11,22,33],44) #传至函数内部变为(11,22,33,44,55)
#2)在实参前面加**,表示会将会将字典直接传到函数内部以字典的形式存在,例如:
def Function_Name(**kwargs):
print(kwargs)
Function_Name(**{"key1":123,"key2":456},key3=789) #传至函数内部变为{'key1': 123, 'key2': 456, 'key3': 789}
#!usr/bin/env python
# -*- coding:utf-8 -*- #2、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数
def char_count(st=""):
dic = {}
number = 0 #表示数字
alphabetic = 0 #表示字母
space = 0 #表示空格
other = 0 #表示其他
for i in st:
if i.isdigit(): #记录数字
number += 1
elif i.isalpha(): #记录字母
alphabetic += 1
elif i.isspace(): #记录空格
space += 1
else:
other += 1
dic['number'] = number
dic['alphabetic'] = alphabetic
dic['space'] = space
dic['other'] = other
return dic print(char_count('123aad !!!!'))
#!usr/bin/env python
# -*- coding:utf-8 -*-
#3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
def islength5(argument):
if isinstance(argument,(str,list,dict)): #判断传入的类型是否是字符串,列表,字典
bol = len(argument) > 5
return bol
else:
return None OB = 'afaafafaf'
print(islength5(OB))
#!usr/bin/env python
# -*- coding:utf-8 -*-
#4、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
def is_containspace(args):
import types
if isinstance(args,str): #判断是否为str类型
for i in args:
if i.isspace():
return True
else:
for i in args:
if is_containspace(i):
return True
return False li = ['aa','bb',('aa','c c')]
print(is_containspace(li))
#!usr/bin/env python
# -*- coding:utf-8 -*-
#5、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
def left_list2(lis):
if len(lis) > 2:
return lis[0:2]
else:
return lis li = [11,22,33,44]
print(left_list2(li))
#!usr/bin/env python
# -*- coding:utf-8 -*-
#6、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def odd_element(iteration):
li = []
for i in range(0,len(iteration),2):
li.append(iteration[i])
return(li) li = [11,22,33,44,55]
print(odd_element(li))

下面两段代码的区别,第一种方法是建立一个新的字典,将处理后的字典赋值给新的字典,如果原字典和新字典都需要的情况下用这种方法,通常都是用这种做法的;

第二种方法是,在原来的字典的基础上进行修改。

#!usr/bin/env python
# -*- coding:utf-8 -*-
# 7、写函数,检查传入字典的每一个value的长度, 如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
# dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]}
# PS: 字典中的value只能是字符串或列表 def left_dict2(dic={}):
new_dic = {}
for key,value in dic.items():
if len(value) > 2:
new_dic[key] = value[0:2]
else:
new_dic[key] = value
return new_dic dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]}
print(left_dict2(dic))
#!usr/bin/env python
# -*- coding:utf-8 -*-
# 7、写函数,检查传入字典的每一个value的长度, 如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
# dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]}
# PS: 字典中的value只能是字符串或列表
def left_dic2(args):
for key,value in args.items():
if len(value) > 2:
args[key] = value[0:2] dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]}
left_dic2(dic)
print(dic)

【python之路16】作业的更多相关文章

  1. python之路——16

    王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594 学习内容 1.内置函数 1. python 数据类型:int bool 数据结构:dic list tupl ...

  2. 【python之路16】lambda表达式

    1.lambda表达式,实际是建立一个简易的函数 下面代码中f1和f2表示是相同过程的代码 def f1(args): return args f2 = lambda args:args print( ...

  3. python 之路,Day11 (下)- sqlalchemy ORM

    python 之路,Day11 - sqlalchemy ORM   本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM ...

  4. Python之路,Day10 - 异步IO\数据库\队列\缓存

    Python之路,Day9 - 异步IO\数据库\队列\缓存   本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitM ...

  5. Python之路,Day8 - Socket编程进阶

    Python之路,Day8 - Socket编程进阶   本节内容: Socket语法及相关 SocketServer实现多并发 Socket语法及相关 socket概念 socket本质上就是在2台 ...

  6. Python之路,Day4 - Python基础4 (new版)

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  7. Python之路3【第一篇】Python基础

    本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...

  8. Python之路【第一篇】:Python简介和入门

    python简介: 一.什么是python Python(英国发音:/ pa θ n/ 美国发音:/ pa θɑ n/),是一种面向对象.直译式的计算机程序语言. 每一门语言都有自己的哲学: pyth ...

  9. Python之路

    Python学习之路 第一天   Python之路,Day1 - Python基础1介绍.基本语法.流程控制              第一天作业第二天   Python之路,Day2 - Pytho ...

随机推荐

  1. iOS开发NSFetchedResultsController的使用CoreData和TableView数据同步更新

    1.效果 2.代码 #import "ViewController.h" #import "Student+CoreDataProperties.h" #def ...

  2. CMS 源码解读

    CMS 是”Content Management System” 的缩写,意为” 内容管理系统”. 内容管理系统是企业信息化建设和电子政务的新宠,也是一个相对较新的市场.对于内容管理,业界还没有一个统 ...

  3. PAT甲级题目1-10(C++)

    1001 A+B Format(20分) Calculate a+b and output the sum in standard format -- that is, the digits must ...

  4. python数据类型,数据结构

    数据类型:int,bool 数据结构:dict,list,tuple,set,str

  5. 分布式事务中间件 Fescar—RM 模块源码解读

    前言 在SOA.微服务架构流行的年代,许多复杂业务上需要支持多资源占用场景,而在分布式系统中因为某个资源不足而导致其它资源占用回滚的系统设计一直是个难点.我所在的团队也遇到了这个问题,为解决这个问题上 ...

  6. Java实现数字大写转换

    需求如下:用json读取后台工时信息,比如23.5小时,需要通过编码将其转换为贰拾叁点伍 比如23.23之前有对Stringl类型强转为Double在转为整型,发生了精度丢失,后来想想对小数点进行分割 ...

  7. Vscode中问题

    1.VScode中如果安装vim插件,那么编辑代码时会默认使用vim 2.出现任何问题都在设置的首选项里面修改,比如终端无法复制,或者终端右击的默认操作等

  8. Django惰性加载和LazyObject

    看登录中间件的时候发现request.user返回的是SimpleOject对象,往下看翻到了LazyObject,看源码看了半天没看懂 网上搜了一堆资料了解下惰性加载实现是的什么功能,再回去看源码, ...

  9. LUOGU P3960 列队 (noip2017 day2T3)

    传送门 解题思路 记得当时考试我还是个孩子,啥也不会QAQ.现在回头写,用动态开点的线段树,在每行和最后一列开线段树,然后对于每次询问,把x行y列的删去,然后再把x行m列的元素加入x行这个线段树,然后 ...

  10. poj 1958

    传送门 四塔汉诺塔问题,转移方程非常玄学,f[i]=min(f[j]*2+d[i-j]) (1 <=j < i),d表示三塔下的汉诺塔问题,这个方程的意思是将j个在四塔模式下有A挪到B,然 ...