中企动力 > 头条 > python中dict的用法

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

python中dict的用法

一步一步带你理解 Python 中的浅复制与深复制 行业视频课程

img

保镖

关注

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基础学习之常用六大数据类型 行业视频课程

img

毕尔白

关注

刚开始学习一门编程语言,除了了解运行环境与语言类型之外,最基本还是从该语言的基本数据类型开始学起。

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)) #print(type(tup3)) #

因为这样会被解释器当做运算符,所以正确的方法是在第一个元素后面添加逗号。

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等常见操作 行业视频课程

img

圣诞节

关注

合并两个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字典操作技巧 公司视频课程

img

愉快的

关注

一、如何让字典保持有序

可以使用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用法 企业视频课程

img

辣椒王

关注

六月 北京 | 高性能计算之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( at 0x0000000001D12EA0>, {'puppy': 5, 'kitten': 2, 'weasel': 1})4[Finished in 0.1s]

更多:

https://cnblogs/jidongdeatao/p/6930325.html

原文链接:https://jianshu/p/fa06ceaa56a8

查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:leadai.org

请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看

LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

「每天3分钟学Python」字典基本知识及用dict统计单词出现个数 推广视频课程

img

陶初晴

关注

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字典数据类型讲解 营销视频课程

img

Hueca

关注

前言

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键值对,注意:返回的是一个有键值对所构成的元组的列表。

总结

本文讲到了字典这种数据类型,字典其实用的很广泛,也讲解了字典的各种方法,也都非常的简单也容易理解,我们必须好好的打好基本功,多学习。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP