网站性能检测评分
注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。
python中dict的用法
一步一步带你理解 Python 中的浅复制与深复制 行业视频课程
Python 中的赋值语句不会对对象进行拷贝,仅仅是将变量名指向对象。对于不可修改的对象来说,这种机制不会影响我们日常的使用。但是,对于可修改的对象,你偶尔可能需要对该对象做一个真正的复制。何为真正的复制?就是修改拷贝来的对象不会影响原来的对象。
Python 中内置的可修改的集合类对象,比如列表、字典、集合等,可以直接使用对应的工厂方法进行拷贝。
需要注意的是,对于复合类型的对象,比如列表、字典、集合等,复制有浅复制与深复制两种类型。
浅复制意味着新建一个对象,但是其子元素仍然指向的对应原对象的子对象。也就是说,这只会对原对象进行一层的拷贝,而不会递归的对子对象也进行拷贝。
深复制则会递归的对子对象进行拷贝。
如果上面的看不懂,没关系,我们通过一个个例子来搞清楚。
浅复制
现在下面这个列表,我们使用 list() 方法对它进行复制
这意味着 xs 和 ys 是两个不同的对象。我们可以看看它们的值
为了证明 xs 与 ys 确实不同,我们可以做个小实验。添加一个子列表到 xs 中,然后看会不会影响 ys 。
与预期相同,如果只是修改原对象这一层,确实不对对 ys 造成影响。
但是由于是浅复制,ys 中的子元素并非是 xs 子元素的拷贝,仅仅是 xs 子对象的引用。因此,如果你修改 xs 中的子元素,ys 中的子元素同样会被修改。
看起来我们只是修改了 xs 中的子元素,实则 ys 中的子元素也被修改了,这是由于浅复制的缘故。
现在我们大概清楚了浅复制与深复制的区别,但是还有两个问题待解决:
一是,对于内置的集合类对象,我们怎么进行深复制?
二是,对于任意的类,又该如何进行浅复制与深复制?
答案是标准库中的 copy 模块,其提供了简单的方法对对象进行浅复制或深复制。
深复制
这次我们仍然使用上面的例子,不同的是,我们使用 copy 模块中的 deepcopy() 方法来进行复制。
还是先看看各自的值
这次,因为 zs 对 xs 进行了深复制,即不仅拷贝了 xs 本身,还对它的子对象都进行了递归的拷贝,所以,如果我们再次修改 xs 的子元素时,并不会对 zs 造成影响。我们来试一试
果然,与预期一致。
顺便说下,使用 copy 模块中的 copy() 方法可以对对象进行浅复制。平时开发需要浅复制的时候,你可以使用该方法,但如果碰到内置的集合类对象,比如列表、字典、集合等的时候,使用对应的工厂方法如 list() ,dict() ,set() 等更 Pythonic 一些。
对任意对象进行复制
现在有一个点类 Point ,如下
其中,__repr__ 方法可以让我们更方便的查看对象的信息。需要注意的是,f'...' 这种格式化字符串的方式在 Python 3.6 才支持,如果是 Python 2 或者 3.6 以前的版本可以使用 '...' % (v1[, v2, ...]) 的方式。
现在我们创建一个点对象并进行浅复制
查看两个对象的信息
和预期一致。
需要注意的是,因为类的两个成员 x 和 y 都是简单类型,这里是整型,所以这里浅复制与深复制没有任何差别。后面我会扩展这个例子。
现在我要定义一个矩形类,其类成员将会使用到上面的点类。
首先我们先试一下浅复制
看下各自的信息
记得我们上面修改列表的浅复制与深复制的例子吗?这里,我要类似的实验。我们修改 rect 的成员,不出意外的话,srect 也会改变。
果然。
下面,我会进行深复制,然后再类似的修改
这次,深复制出来的 drect 对象与 srect 才能说是“真正不同”的对象。
copy 模块中还有其它很多用法,比如定义对象的 __copy__() 和 __deepcopy__() 方法可以自定义对象的浅复制与深复制行为等。这不是本文的重心,有兴趣的可以去看相应的文档 https://docs.python.org/3/library/copy.html 。
小结
* 浅复制不会克隆子对象,所以,复制出来的对象和原对象并非完全不想关。
* 深复制会递归的克隆子对象,所以,复制出来的对象和原对象完全不相关,但是深复制比浅复制会慢一些。
* 使用 copy 模块你可以复制任何类,不管是浅复制还是深复制。
巩固
从网上找了组图片(侵删),让大家加深下认识
首先是赋值
然后是浅复制
最后是深复制
Python基础学习之常用六大数据类型 行业视频课程
刚开始学习一门编程语言,除了了解运行环境与语言类型之外,最基本还是从该语言的基本数据类型开始学起。
Python六大常用数据类型:
int 整数 float 浮点数 str 字符串 list 列表 tuple 元组 dict 字典
讲解这些先说一下python中的变量与变量名。
变量其实本质上是一个具有特殊格式的内存,变量名则是指向这个内存的别名。python中的变量不需要声明,所有的变量必须赋值了才能使用。赋值的步骤:
a = 100
第一步:准备好值100第二部:准备好变量名a第三部:将值与名字进行关联
一、整数python将其他一些静态语言中的int、long,也就是整型和长整型合并为了一个。python中的int是边长的,也就是说可以存储无限大的整数,但是这是不现实的,因为没有这么多的内存够分配。整型不仅支持十进制,还支持二进制、八进制、十六进制。可以通过下面的方式来互相转换:
print(bin(20)) #转换二进制print(oct(20)) #转换八进制print(hex(20)) #转换十六进制
二、浮点型浮点数也就是小数,如22.1,44.2,也可以使用科学计数法,比如:1.22e8。python支持对整数和浮点数直接进行四则混合运算。整数运算结果仍然是整数,浮点数运算结果仍然是浮点数,但整数和浮点数混合运算的结果就变成浮点数了。
a = 1b = 1.1print(type(a+b)) #
三、字符串字符串在任何编程语言中都是最常用的数据类型。字符串的创建很简单,也是上面所说的三步,但是要加上单引号或者双引号。
a = "hello python"
也可以使用 “”" 创建多行字符串:
a = """ hello python"""
字符串可以通过下面方式进行截取或者连接:
print (str[0:4]) 输出第一个到倒数第四个的所有字符 print (str[0]) 输出单字符 第1个字符print (str[3:]) 输出从第四个开始之后的所有字符print (str * 2) 输出字符串两次print (str + "bbbb") 连接字符串
字符串常用函数:str.strip() 消除字符串s左右两边的空白字符(包括’\t’,’\n’,’\r’,’’)len(str) 获取字符串长度str.upper() 转换为大写str.lower() 转换为小写str.title() 每个单词首字母大写str.capitalize() 首字母大写字符串翻转:
a = 'abcde'print(a[::-1])
字符串分割:
a = 'hello,python'print(a.split(',')) #['hello', 'python'] 返回一个列表
相对应的还有一个将列表元素连接成字符串:
a = ['hello', 'python']str = '-'print(str.join(a)) # hello-python
四、列表列表的写法是一个方括号内的值用逗号分隔。比如上面的[‘hello’, ‘python’]。列表的数据项不需要具有相同的类型,列表中的每个元素都分配一个数字索引,第一个索引是0,第二个索引是1,依此类推。访问列表中的值可以通过下面的方式:
list1 = [1, 2, 3, 4, 5, 6]print(list1[2])
同样可以通过索引截取
print ("list1[2:5]: ", list1[2:5])
列表常用操作:list1.append(‘7’) 追加一个元素在末尾,每次只能添加一个len(list1) 返回列表元素个数max(list1) 返回列表元素最大值min(list1) 返回列表元素最小值list1.count(obj) 统计某个元素在列表中出现的次数list1.index(obj) 从列表中找出某个值第一个匹配项的索引位置list1.reverse() 反向列表中元素list1.clear() 清空列表list1.extend(seq) 在列表末尾一次性追加另一个序列中的多个值,也就是扩充了列表 append与extend的区别:
A = ['a', 'b', 'c']A.append(['d', 'e'])print(A) # ['a', 'b', 'c', ['d', 'e']]B = ['a', 'b', 'c']B.extend(['d', 'e'])print(B) # ['a', 'b', 'c', 'd', 'e']
extend方法只能接收list类型,它是把这个列表中的每个元素添加到原list中。append可以接收任意类型,追加到原list的末尾。
五、元组元组的创建也很简单,和list类似,只是把’[]‘换成了’()’。
tup1 = ('hello', 'python')
元组中只有一个元素的时候要注意:
tup2 = (10)tup3 = ('a')print(type(tup2)) #
因为这样会被解释器当做运算符,所以正确的方法是在第一个元素后面添加逗号。
tup4 = ('a',)print(type(tup4)) #
元组同样可以使用下标索引来访问元组中的值:
tup5 = ('hello', 'python', 'hello', 'word')print(tup5[1]) #pythonprint(tup5[1:3]) #('python', 'hello')
注意:元组是不可以被修改的。
tup6 = ('hello', 'python', 'hello', 'word')tup6[2] = 'aaa'
上面会出现一个异常: TypeError: ‘tuple’ object does not support item assignment.但是元组中如果包含了一个列表,那么这个列表是可以被修改的。
tup7 = ('hello', 'python', 'hello', 'word', ['aa', 'bb', 'cc'])tup7[-1][1] = 'ddd'print(tup7) # ('hello', 'python', 'hello', 'word', ['aa', 'ddd', 'cc'])
元组运算符:len(tup) 计算元素个数tup1 + tup2 连接生成新元组tup * 4 元组复制num in tup 元素是否存在,返回True/False
六、字典python中的字典就是key,value的形式。使用大括号包含起来。字典中的成员的键是唯一的,如果出现多个同名的键,那么写在后面覆盖前面的值。形式如下:
dict1 = {'a' : 1, 'b' : 2}
字典的常用操作最基本的也就是增删改查:获取:直接通过键来获取。
dict['b'] # 2
dict.keys() 获取字典中所有的键dict.values() 获取字典中的所有的值增加:
dict1['c'] = 3 #{'a': 1, 'b': 2, 'c': 3} #如果键存在则更新对应的值
修改:直接给键进行再次赋值就可以修改键对应的值了。如果键不存在,则变成添加成员。还可以通过:
dict1.update({"a":"11"})dict1.setdefault("a", "222") # 已存在的键则修改无效dict1.setdefault("d","222") # 不存在的话则创建dict1.setdefault("e") # 没有设置值为None
删除:使用pop删除指定键对应的成员,同时返回该值
print(dict1) # {'a': '11', 'b': 2, 'c': 3, 'd': '222', 'e': None}print(dict1.pop("a")) # aprint(dict1) # {'b': 2, 'c': 3, 'd': '222', 'e': None}#在不设置默认值的情况下,使用pop删除不存在的键,会报错。print(dict1.pop("f")) # 报错 KeyError: 'f'
如果设置了默认值, print(dict1.pop(“f”, None)),则不会报错,返回这个默认值。判断是否删除成功可以通过下面方式来判断:
if dict1.pop("f", None) == None: print('键不存在')else: print('删除成功')
以上则是python中最基本的数据类型以及用法,当然还有其他的数据类型,作者暂时只列举了这些。
更过python文章,关注作者哦!干货多多!!
Python之list、dict、 json等常见操作 行业视频课程
合并两个list并去除重复元素
合并list用+运算符,再用set去除重复元素,最后转换回list。
用其中一个list+另一个去除在前面list后的元素组成的list。
合并两个list生成dict(一个为keys,一个为values)
先对两个list用zip函数,最后转换成dict。
dict转换成元素为tuple的list
用dict的items函数。
用dict的iteritems函数。
两个list元素分别相加生成求和后的list
用map和operator.add。
用zip和sum函数。
json转换成dict
用json.loads()方法。
dict转换成json
用json.dumps()方法。
json数据写入到文件
用json.dump()方法。
从文件读入json数据
用json.load()方法。
Python字典操作技巧 公司视频课程
一、如何让字典保持有序
可以使用collections模块中的OrderedDict类,OrderedDict内部维护了一个双向链表,它会根据元素加入的顺序来排列键的位置,大小是普通字典的2倍多,所以,在使用时要做好需求分析。
from collections import OrderedDictd=OrderedDict() d['a']=1d['b']=2d['c']=3d['d']=4for key in d:print(key,d[key])
输出结果:
a 1b 2 c 3 d 4 [Finished in 0.2s]
二、如何对字典求最大值、最小值:
为了对字典内容做有用的计算,通常会利用zip()将字典的键和值反转过来:
prices={'a':50.3,'b':12.3,'c':15.98,'d':10.75 }min_price=min(zip(prices.values(),prices.keys()))max_price=max(zip(prices.values(),prices.keys()))print(min_price)print(max_price)
输出结果:
(10.75, 'd')(50.3, 'a')[Finished in0.2s]
三、如何找到两个字典中相同的地方:
python字典keys()方法同items()方法,返回的是keys-view对象,它们支付常见的集合操作如并,交,差;但values()方法不支持。
x={ 'a':1, 'b':5, 'c':10}y={ 'd':2, 'b':5, 'c':8}re_a=x.keys() & y.keys()print('x,y中均有的键是:',re_a)re_b=x.keys() - y.keys()print('x中有但y中没有的键是:',re_b)re_c=x.items() & y.items()print('x,y中相同的键值对:',re_c)
输出结果:
x,y中均有的键是: {'c', 'b'}x中有但y中没有的键是: {'a'}x,y中相同的键值对: {('b', 5)}[Finished in0.1s]
五、如何通过公共键对字典列表排序
利用operator模块中的itemgetter函数排序非常简单假设我们从数据库中获得的数据如下:
rows=[{'fname':'Brian','lname':'Jones','age':18},{'fname':'David','lname':'Beazley','age':25},{'fname':'John','lname':'Clesse','age':19},{'fname':'Bim','lname':'Jones','age':23}]
我们对以上记录进行排序非常简单:
from operator import itemgetterrows_by_fname=sorted(rows,key=itemgetter('fname'))rows_by_age=sorted(rows,key=itemgetter('age'))print(rows_by_fname)print(rows_by_age)
输出结果:
[{'fname': 'Bim', 'lname': 'Jones', 'age': 23}, {'fname': 'Brian', 'lname': 'Jones', 'age': 18}, {'fname': 'David', 'lname': 'Beazley', 'age': 25}, {'fname': 'John', 'lname': 'Clesse', 'age': 19}][{'fname': 'Brian', 'lname': 'Jones', 'age': 18}, {'fname': 'John', 'lname': 'Clesse', 'age': 19}, {'fname': 'Bim', 'lname': 'Jones', 'age': 23}, {'fname': 'David', 'lname': 'Beazley', 'age': 25}]
[Finished in0.1s]
Python中defaultdict用法 企业视频课程
六月 北京 | 高性能计算之GPU CUDA培训
6月22-24日
三天密集式学习 快速带你入门
阅读全文
>
正文共311个字,预计阅读时间5分钟。
defaultdict类就好像是一个dict,但是它是使用一个类型来初始化的
defaultdict类的初始化函数接受一个类型作为参数,当所访问的键不存在的时候,可以实例化一个值作为默认值
defaultdict类除了接受类型名称作为初始化函数的参数之外,还可以使用任何不带参数的可调用函数,到时该函数的返回结果作为默认值,这样使得默认值的取值更加灵活。
1strings = ('puppy', 'kitten', 'puppy', 'puppy', 2'weasel', 'puppy', 'kitten', 'puppy') 3counts = {} 4""" 5单词统计 6""" 7# 方法1 使用判断语句检查 8for word in strings: 9if word notin counts:10counts[word] = 111else:12counts[word] += 113print(counts)14# 方法2 使用dict.setdefault()方法来设置默认值:15counts = {}16for word in strings:17counts.setdefault(word, 0)18counts[word] += 119print(counts)20# 方法3 使用collections.defaultdict21from collections import defaultdict22counts = defaultdict(lambda: 0)23for word in strings:24counts[word] += 125print(counts)
结果:
1{'puppy': 5, 'kitten': 2, 'weasel': 1}2{'puppy': 5, 'kitten': 2, 'weasel': 1}3defaultdict(
更多:
https://cnblogs/jidongdeatao/p/6930325.html
原文链接:https://jianshu/p/fa06ceaa56a8
查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:leadai.org
请关注人工智能LeadAI公众号,查看更多专业文章
大家都在看
LSTM模型在问答系统中的应用
基于TensorFlow的神经网络解决用户流失概览问题
最全常见算法工程师面试题目整理(一)
最全常见算法工程师面试题目整理(二)
TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络
装饰器 | Python高级编程
今天不如来复习下Python基础
「每天3分钟学Python」字典基本知识及用dict统计单词出现个数 推广视频课程
01
Python的数据结构字典被经常用到,尤其在查询使用较多的场合。今天,以统计数组中元素出现个数为例,介绍Python中字典的基本用法。
02
Python增加元素,不像其他语言使用显示的操作接口,只需要 dict[1] = 3, 如果字典中不存在1,则直接新增元素键值对(1,3),如果存在则替换键1为3.
如何判断某个键存在呢?
if key in dict: 这样就判断出key是否在dict字典中了。
03
统计元素的出现次数
[1,3,0,-1,4,3,2,1,2,3,4,5]
如上数组,统计元素出现次数的代码:
结果:
{1: 2, 3: 3, 0: 1, -1: 1, 4: 2, 2: 2, 5: 1}
python之dict字典数据类型讲解 营销视频课程
前言
python中有一种非常重要的数据类型就是dict字典。字典数据类型使用频率是很广泛的,其实字典数据类型非常类似于Java中的Map,JavaScript中的json。本文就重点讲解dict字典。
概念
字典不同于其他数据类型,最重要的区别在于字典数据类型是通过一个key来去获取对应的value。字典是通过键值对/key-value对联系起来的。
语法
字典的每个键值对使用“:”冒号进行分割,多个键值对使用“,”逗号分割。整个字典被一对“{}”包括起来。
字典中的key必须要保证唯一,但是值可以重复。
语法形如:{key1 : value1 , key2 : value2 ......}
案例举例:{'name' : 'HelloWorld' , 'age' : 30}
字典常用方法
1、定义字典
总结:字典的key使用“单引号”或者“双引号”括起来,key所对应的value的值是什么类型就什么类型。通过type可以查看变量的具体类型。
2、user对象增加key-value对
总结:增加键值对的语法是“变量名[新的key] = value”的形式。
3、user对象修改address的值
总结:修改指定的键所对应的值,语法是:“变量名[已经存在的key] = value”的形式。
4、user删除address
总结:删除字典中指定的key,使用语法“del 变量名[key]”的形式。
5、根据指定的key查询所对应的value
总结:两种方式可以根据指定的key获取对应的value。
6、获取字典的长度
总结:使用len方法可以获取到字典的长度,这里的长度其实是字典中key的个数。
7、获取字典中所有的key
总结:使用keys()函数获取所有的key,注意,这个方法的返回值是一个key组成的列表。
8、获取字典中所有value
总结:通过values()函数获取字典中所有的值,注意:返回值是value组成的列表。
9、获取字典的键值对
总结:使用items方法可以获取字典的key-value键值对,注意:返回的是一个有键值对所构成的元组的列表。
总结
本文讲到了字典这种数据类型,字典其实用的很广泛,也讲解了字典的各种方法,也都非常的简单也容易理解,我们必须好好的打好基本功,多学习。