Python个人笔记

您所在的位置:网站首页 python中括号用法 Python个人笔记

Python个人笔记

#Python个人笔记| 来源: 网络整理| 查看: 265

一、字典1、定义

Python字典(Dictionary)是一种无序的、可变的、键-值对(key-value)集合。字典中的每个键(key)都是唯一的,而且必须是不可变的数据类型(如整数、浮点数、字符串等),对应的值(value)可以是任意的Python数据类型(如列表、元组、字典等)。字典的实现采用哈希表(Hash Table),可以快速通过键(key)查找对应的值(value)。

字典是Python中唯一的映射类型。

2、创建和访问

字典的使用非常简单,它有自己的标志性符号,就是用大括号({})定义。字典由“键”和“值”共同构成,每一对键值组合称为“项”。

注意:字典的键必须独一无二,但值则不必。值可以取任何数据类型,但必须是不可变的,如字符串、数或元组。

要声明一个空字典,直接用大括号即可:

>>> empty = {} >>> empty {} >>> type(empty)

也可以使用dict()内置函数来创建字典:

>>> dict1 = dict((('F', 70), ('i', 105), ('s', 115), ('h', 104), ('C', 67))) >>> dict1 {'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67}

额外使用一个()的原因是,dict()函数的参数可以是一个序列(但不能是多个),所以要打包成一个元组(或列表)序列。

还可以通过提供具有映射关系的参数来创建字典:

>>> dict1 = dict(F=70, i=105, s=115, h=104, C=67) >>> dict1 {'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67}

这里要注意的是,键的位置不能加上表示字符串的引号,否则会报错:

>>> dict1 = dict('F'=70, 'i'=105, 's'=115, 'h'=104, 'C'=67) SyntaxError: keyword can't be an expression

访问字典里的值与访问序列类似,只需要把相应的键放入方括号即可,如果该键不在映射中,则抛出KeyError:

还有一种创建方法是直接给字典的键赋值,如果键已存在,则改写键对应的值;如果键不存在,则创建一个新的键并赋值:

>>> dict1 {'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67} >>> dict1['x'] = 88 >>> dict1 {'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67, 'x': 88} >>> dict1['x'] = 120 >>> dict1 {'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67, 'x': 120}

注意:字典不允许同一个键出现两次,如果同一个键被赋值两次,后一个值会被记住:

>>> courses = {"小甲鱼":"《零基础入门学习Python》", "不二如是":"《零基础入门学 习Scratch》", "小甲鱼":"《极客Python之效率革命》"} >>> courses {'小甲鱼': '《极客Python之效率革命》','不二如是': '《零基础入门学习Scratch》'}

键必须不可变,所以可以用数值、字符串或元组充当,如果使用列表那就不行了:

创建字典的五种方法:

>>> a = dict(one=1, two=2, three=3) >>> b = {'one': 1, 'two': 2, 'three': 3} >>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3])) >>> d = dict([('two', 2), ('one', 1), ('three', 3)]) >>> e = dict({'three': 3, 'one': 1, 'two': 2}) >>> a == b == c == d == e True

有别于序列,字典是不支持拼接和重复操作的:

3、内置方法

1)fromkeys(seq[, value])

fromkeys()方法用于创建并返回一个新的字典,它有两个参数;第一个参数是字典的键;第二个参数是可选的,是传入键对应的值,如果不提供,那么默认是None。

>>> dict1 = {} >>> dict1.fromkeys((1, 2, 3)) {1: None, 2: None, 3: None} >>> dict2 = {} >>> dict2.fromkeys((1, 2, 3), "Number") {1: 'Number', 2: 'Number', 3: 'Number'} >>> dict3 = {} >>> dict3.fromkeys((1, 2, 3), ("one", "two", "three")) {1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}

fromkeys()方法并不会将值"one"、"two"和"three"分别赋值键1、2和3,因为fromkeys()把("one", "two", "three")当成一个值了。

2)keys(),values()和items()

访问字典的方法有keys()、values()和items()。keys()用于返回字典中的键,values()用于返回字典中所有的值,那么,items()当然就是返回字典中所有的键值对(也就是项)。

>>> dict1 = {}#数据类型为 >>> dict1 = dict1.fromkeys(range(32), "赞") >>> dict1.keys()#数据类型为 dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]) >>> dict1.values()#数据类型为 dict_values(['赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞']) >>> dict1.items()#数据类型为 dict_items([(0, '赞'), (1, '赞'), (2, '赞'), (3, '赞'), (4, '赞'), (5, '赞'), (6, '赞'), (7, '赞'), (8, '赞'), (9, '赞'), (10, '赞'), (11, '赞'), (12, '赞'), (13, '赞'), (14, '赞'), (15, '赞'), (16, '赞'), (17, '赞'), (18, '赞'), (19, '赞'), (20, '赞'), (21, '赞'), (22, '赞'), (23, '赞'), (24, '赞'), (25, '赞'), (26, '赞'), (27, '赞'), (28, '赞'), (29, '赞'), (30, '赞'), (31, '赞')])

字典可以很大,有时候我们并不知道提供的项是否在字典中存在,如果不存在,Python就会报错:

3)get(key[, default])

get()方法提供了更宽松的方式去访问字典项,当键不存在的时候,get()方法并不会报错,只是默默地返回了一个None,表示啥都没找到:

>>> dict1.get(31) '赞' >>> dict1.get(32) >>>

如果希望找不到数据时返回指定的值,那么可以在第二个参数设置对应的默认返回值:

>>> dict1.get(32, "木有") '木有'

如果不知道一个键是否在字典中,那么可以使用成员资格操作符(in或not in)来判断:

>>> 31 in dict1 True >>> 32 in dict2 False

在字典中检查键的成员资格比序列更高效,当数据规模相当大的时候,两者的差距会很明显(注:因为字典是采用哈希方法一对一找到成员,而序列则是采取迭代的方式逐个比对)。最后要注意的一点是,这里查找的是键而不是值,但是在序列中查找的是元素的值而不是元素的索引。

如果需要清空一个字典,则使用clear()方法:

>>> dict1 {0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞', 10: '赞', 11: '赞', 12: '赞', 13: '赞', 14: '赞', 15: '赞', 16: '赞', 17: '赞', 18: '赞', 19: '赞', 20: '赞', 21: '赞', 22: '赞', 23: '赞', 24: '赞', 25: '赞', 26: '赞', 27: '赞', 28: '赞', 29: '赞', 30: '赞', 31: '赞'} >>> dict1.clear() >>> dict1 {}

两种清除方法:

>>> a = {"姓名":"小甲鱼", "密码":"123456"} >>> b = a >>> b {'姓名': '小甲鱼', '密码': '123456'} >>> a = {} >>> a {} >>> b {'姓名': '小甲鱼', '密码': '123456'}

a、b指向同一个字典,然后试图通过将a重新指向一个空字典来达到清空的效果时,我们发现原来的字典并没有被真正清空,只是a指向了一个新的空字典而已。所以,这种做法在一定条件下会留下安全隐患(例如,账户的数据和密码等资料有可能会被窃取)。

推荐的做法是使用clear()方法:

>>> a = {"姓名":"小甲鱼", "密码":"123456"} >>> b = a >>> b {'姓名': '小甲鱼', '密码': '123456'} >>> a.clear() >>> a {} >>> b {}

4)copy()

copy()方法是用于拷贝(浅拷贝)整个字典:

>>> a = {1:"one", 2:"two", 3:"three"} >>> b = a.copy() >>> id(a) 63239624 >>> id(b) 63239688 >>> a[1] = "four" >>> a {1: 'four', 2: 'two', 3: 'three'} >>> b {1: 'one', 2: 'two', 3: 'three'}

5)pop(key[, default])和popitem()

pop()是给定键弹出对应的值,而popitem()是弹出一个项,这两个比较容易理解:

>>> a = {1:"one", 2:"two", 3:"three", 4:"four"} >>> a.pop(2) 'two' >>> a {1: 'one', 3: 'three', 4: 'four'} >>> a.popitem() (1, 'one') >>> a {3: 'three', 4: 'four'}

6)setdefault(key[, default])

setdefault()方法和get()方法有点相似,但是,setdefault()在字典中找不到相应的键时会自动添加:

>>> a = {1:"one", 2:"two", 3:"three", 4:"four"} >>> a.setdefault(3) 'three' >>> a.setdefault(5) >>> a {1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: None}

7)update([other])

最后一个是update()方法,可以利用它来更新字典:

>>> pets = {"米奇":"老鼠", "汤姆":"猫", "小白":"猪"} >>> pets.update(小白="狗") >>> pets {'米奇': '老鼠', '汤姆': '猫', '小白': '狗'}

Python还有另一种收集方式,就是用两个星号(**)表示。两个星号的收集参数表示为将参数们打包成字典的形式,收集参数其实有两种打包形式:一种是以元组的形式打包;另一种则是以字典的形式打包。

当参数带两个星号(**)时,传递给函数的任意数量的key=value实参会被打包进一个字典中。那么有打包就有解包,再来看下一个例子:

>>> a = {"one":1, "two":2, "three":3} >>> test(**a) 有 3 个参数 它们分别是: {'three': 3, 'one': 1, 'two': 2}

删除字典中的指定键值对:

my_dict = {'name': 'Alice', 'age': 20, 'gender': 'female'} # 使用del语句删除指定的键值对 del my_dict['age'] print(my_dict) # 输出 {'name': 'Alice', 'gender': 'female'} # 使用dict.pop()方法删除指定的键值对 gender = my_dict.pop('gender') print(gender) # 输出 'female' print(my_dict) # 输出 {'name': 'Alice'} # 删除不存在的键 try: del my_dict['score'] except KeyError: print("指定键不存在") score = my_dict.pop('score', 0) # 使用默认值避免异常 print(score) # 输出 0二、集合1、定义

Python集合(Set)是一种无序、不重复的数据集合。集合中的元素必须是不可变的,例如数字、字符串、元组等。集合使用大括号{}表示,元素之间使用逗号分隔,例如:{1, 2, 3, 'hello'}。

集合类似字典,却又不太相同:

>>> num1 = {} >>> type(num1) >>> num2 = {1, 2, 3, 4, 5} >>> type(num2)

集合在Python中的最大特点就是两个字:唯一。

需要额外做些什么,集合就会自动地将重复的数据删除。

>>> num = {1, 2, 3, 4 ,5, 4, 3, 2, 1} >>> num {1, 2, 3, 4, 5}

但要注意的是,集合是无序的,也就是不能试图去索引集合中的某一个元素。

2、创建和访问

(1)创建

创建集合有两种方法:一种是直接把一堆元素用大括号({})括起来;另一种是用set()内置函数。

>>> set1 = {"小甲鱼", "小鱿鱼", "小鲤鱼", "小甲鱼"} >>> set2 = set(["小甲鱼", "小鱿鱼", "小鲤鱼", "小甲鱼"]) >>> set1 == set2 True

可以利用集合特性,去除列表的重复元素:

>>> list1 = [1, 2, 3, 4, 5, 5, 3, 1, 0] >>> list1 = list(set(list1)) >>> list1 [0, 1, 2, 3, 4, 5]

不过由于set()创造的集合内部是无序的,所以再调用list()将无序的集合转换成列表就不能保证原来的列表顺序了

(2)访问

由于集合中的元素是无序的,所以并不能像序列那样用下标来进行访问,但是可以使用迭代把集合中的数据一个个读取出来:

当然也可以使用in和not in判断一个元素是否在集合中已经存在:

>>> 0 in set1 True >>> 'oo' in set1 False >>> 'xx' not in set1 True

使用add()方法可以为集合添加元素,使用remove()方法可以删除集合中已知的元素:

>>> set1.add(6) >>> set1 {0, 1, 2, 3, 4, 5, 6} >>> set1.remove(5) >>> set1 {0, 1, 2, 3, 4, 6}3、不可变集合

时候希望集合中的数据具有稳定性,也就是说,像元组一样,不能随意地增加或删除集合中的元素。那么可以定义成不可变集合,这里使用的是frozenset()函数,就是把元素给frozen(冰冻)起来:

附录

笔记来源:零基础入门学习Python(第2版)-小甲鱼-微信读书字典、零基础入门学习Python(第2版)-小甲鱼-微信读书集合



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3