环境及版本
1 | Windows 10 x64 |
字典(dict)
- 是python中唯一内建的映射类型,字典中的值是无序的
- 在Java中也就是map,是key-value键值对
- 键可以是数字、字符串、元组等不可变元素
字典的创建
- 字典由多个键值对组成,之间用逗号隔开
- 键和值之间用冒号分割,而整个dict则用花括号括起
- 空字典用{}表示
1 | age_dict = {'Alex': 22, 'Bob': 21, 'Tom': 25, 'Beth': 18} |
dict类型
- 可以其他映射的序列来建立字典
1 | student_list = [('name','Alex'),('age',20),('gender','male')] |
- 也可以通过关键字参数来创建dict
1 | student_list_1 = dict(name='Tom', age=20) |
字典操作
字典的基本操作与序列类似
- len()返回参数中键值对的数量
- d[k]返回键k上对应的值
- d[k]=x类似于赋值语句,设定键k上的值为x
- dek d[k]删除键为k的那一项
- k in d检查d中是否含有键为k的项
1 | print len(student_dict) |
- 键类型:可以是任意不可变类型,如浮点数、字符串、元组等
- 自动添加:即使键一开始并不存在,也可以为它赋值,这样dict就会建立新的键值对
- 成员资格:表达式k in d查找的是键,而不是值
- 在dict中查找成员资格比在list中效率高
字典的格式化字符串
- 这是一种模版时的格式化,可以使需要格式化的字符串结构更加清晰
1 | hobby_dict = {'Bob':'game','Alex':'tennis','Tom':'basketball'} |
字典方法
clear方法
- 用于清除字典中的所有项,这是一个原地操作,没有返回值
1 | clear_dict = {'name':'Bob','age':23} |
copy方法
- 浅拷贝:返回一个具有相同键值对的新dict,这种方式是引用,指向同一块内存地址
1 | light_copy = {'name':'Tom','hobby':['basketball','fishing']} |
- 深拷贝:复制其包含的所有值,这是重新创建一个dict,内存地址不同
1 | from copy import deepcopy |
fromkeys方法
- 用于使用给定的键,建立新的字典,每个键都对应一个默认值None
- 如果不想用None作为默认值,可以自己指定默认值
1 | print dict.fromkeys(['name','age']) |
get方法
- 通过get可以获取对应键的值,并且在键值不存在时返回默认None
- 默认值None可以自己指定
1 | print deepcopy_dict.get('xxx') |
has_key方法
- 该方法可以检查字典中是否含有特定的键
- python3.0不包括这个函数
1 | print deepcopy_dict.has_key('names') |
items和iteritems方法
- items方法返回所有键值对组成的列表,但并没有顺序,因为dict本身是无序的
- iteritems会返回一个迭代器,而不是列表
- 在一些情况下iteritems会高效很多
1 | print hobby_dict.items() |
keys和iterkeys方法
- keys方法将字典中的键以列表的形式返回
- iterkeys则返回一个迭代器,而不是列表
1 | print hobby_dict.keys() |
pop方法
- 获取对应给定键的值,然后将这个键值对从dict中删除
1 | pop_dict = {'name':'Tom','age':20} |
popitem方法
- 因为dict是无序的,所以popitem方法是随机弹出一项
- 同样因为无序,dict中没有append方法
1 | popitem_dict = {'name':'Alex','gender':'male','age':20,'hobby':'tennis'} |
setdefault方法
- 类似与get方法,能够获得给定键所对应的值
- 同样还能在不含有给定键的情况下设定相应的键值
1 | setdefault_dict = {} |
update方法
- 可以利用一个dict项更新另一个dict
- 若有相同的项,则会被替换掉
1 | update_dict = {'name':'Alex','gender':'male','age':20,'hobby':'tennis'} |
values和itervalues方法
- values返回dict中值的列表,返回列表中可以包含重复元素
- itervalues返回的是一个迭代器,而不是列表
1 | print update_dict.values() |
集合(set)
- set是一个无序不重复的元素集合,基本功能是关系测试和消除重复
- 集合对象支持union(并集)、intersection(交集)、difference(差集)、sysmmetric difference(对称差集)
- set是一个只有key的集合
set类型
- set可以将传入的序列变成一个set类型
- 当传入的序列中有重复元素时,会自动去重
1 | set_list = [1,2,2,2,3,4,5,5,6] |
集合的运算
- 交集运算
1 | //set_1.intersection(set_2) |
- 并集运算
1 | //set_1.union(set_2) |
- 差集运算
1 | //set_1.difference(set_2) |
- 对称差集
1 | //set_1.symmetric_difference(set_2) |
基本操作
add和update方法
- add用于在set中添加一项
- update用于在set中添加多项
1 | set_3 = set([0,1,2,3]) |
len方法
- 返回set的长度
1 | print len(set_3) |
in方法
- 检测某个key是否在set中
1 | print 0 in set_3 |
discard方法
- 在set中存在这个元素,则删除;返回值为None
1 | set_3.discard(1) |
pop方法
- 随机返回一个元素,然后从set中删除
1 | print set_3.pop() |
clear方法
- 清空整个set,返回值为None
1 | set_3.clear() |
参考:Python基础教程(第2版·修订版)
转载请注明出处