python笔记04:字典

4.1 字典的使用

字典:通过名字来引用值的数据结构,又称为映射

字典中的值并没有特殊的顺序,但是都存储在一个特定的键下

字典提供的功能:快速查找特定键值对应关系

某些情况下,字典比列表更好用一些,比如:

1.标识一个游戏期盼的状态,每个键都是由坐标值组成的元组

2.存储文件修改时间,用文件名作为键

3.数字电话、地址簿

问题:为什么用字符串而不用整数来表示电话号码?

为了防止产生误识别

4.2 创建和使用字典

phonebook = {‘Alice‘:1567,‘Beth‘:‘3657‘,‘Cecil‘:0010}

字典有多个键-值对构成,空字典由两个大括号构成,如{}

注意:字典中的键是唯一的,值不唯一

4.2.1 dict函数

可以使用dict函数,通过其他映射(比如字典)或者(键,值)对的序列建立字典

items = [(‘name‘,‘Gumby‘),(‘age‘,43)]
d = dict(items)
>>> print d
{‘age‘: 43, ‘name‘: ‘Gumby‘}

4.2.2 字典的基本操作

len(d) :返回d总的键值对数量

d[k]    :返回关联到键k上的值

d[k]=v :将值v关联到键k上

del d[k]:删除键为k的项

k in d   :检查d中是否含有键为k的项

键类型:不一定是整型,可以是任意的不可变类型,如浮点型(实型)、字符串或者元组

4.2.3 字典的格式化字符串

phonebook = {‘Alice‘:1567,‘Beth‘:‘3657‘,‘Cecil‘:0010}
>>> "Cecil‘s phone number is %(Cecil)s." % phonebook
"Cecil‘s phone number is 8."

4.2.4 字典方法

1.clear:清除字典中的所有项

这个操作没有返回值

2.copy:返回一个具有相同键值对的新字典

这一种复制是浅复制

浅复制:

x = {‘username‘:‘admin‘,‘machine‘:[‘foo‘,‘bar‘,‘baz‘]}
y = x.copy()
y[‘username‘] = ‘mlh‘
y[‘machine‘].remove(‘bar‘)
print y
print x

#结果如下
{‘username‘: ‘mlh‘, ‘machine‘: [‘foo‘, ‘baz‘]}
{‘username‘: ‘admin‘, ‘machine‘: [‘foo‘, ‘baz‘]}

可以看到,当在副本中替换值的时候,原始字典不受影响,但是如果修改了某个字,原始字典也会发生变化,因为同样的也存储在原字典中,避免浅复制的一种方法就是使用深复制,复制其包含的所有值,可以使用copy模块的deepcopy来实现

深度复制:

from copy import deepcopy
d = {}
d[‘names‘] = [‘Alfed‘,‘Bertand‘]
c = d.copy()
dc = deepcopy(c)
dc[‘names‘].append(‘Clive‘)

print c
print dc
#结果如下:
{‘names‘: [‘Alfed‘, ‘Bertand‘]}
{‘names‘: [‘Alfed‘, ‘Bertand‘, ‘Clive‘]}

3.fromkeys:使用给定的键建立新字典

>>> {}.fromkeys([‘name‘,‘age‘])
{‘age‘: None, ‘name‘: None}

>>> dict.fromkeys([‘name‘,‘age‘])
{‘age‘: None, ‘name‘: None}

4.get:更宽松的访问字典方法

一般来说,如果试图访问字典中不存在的项时会出错,而用get就不会

>>> d = {}
>>> d[‘name‘]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: ‘name‘
>>> print d.get(‘name‘)
None

可以看到,但是用get访问一个不存在的键时,没有任何异常,而得到了None值。还可以自定义默认值,替换None

>>> print d.get(‘name‘,‘N/A‘)
N/A

如果键存在,get用起来就像普通的字典查询一样

>>> d[‘age‘] = 43
>>> d.get(‘age‘)
43

5.haskey:判断是否有特定键

相当于表达式k in d.

6.item与iteritems:将字典的值以列表形式返回

items方法将字典中所有项以列表的形式返回,列表中的每一项表示为(键、值)对的形式,但是项在返回时并没有遵循特定的次序

>>> d = {‘name‘:‘Lily‘,‘age‘:24}
>>> d.items()
[(‘age‘, 24), (‘name‘, ‘Lily‘)]

iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是一个列表

>>> it = d.iteritems()
>>> print it
<dictionary-itemiterator object at 0x7f54e5fff158>
>>> print list(it)
[(‘age‘, 24), (‘name‘, ‘Lily‘)]

7.keys与iterkeys:将字典中的键以列表形式返回

keys方法将字典中的键以列表形式返回,iterkeys则返回针对键的迭代器

8.pop:获得相应键的值,并删除键值对

>>> d
{‘age‘: 24, ‘name‘: ‘Lily‘}
>>> d.pop(‘name‘)
‘Lily‘
>>> d
{‘age‘: 24}

9.popitem:弹出最后一个元素

列示于list.pop,后者会弹出列表的最后一个元素。但不同的是,popitems弹出随机的项,因为字典并没有“最后的元素”或者其他有关顺序的概念。弱项一个接一个的移除并处理项,这个方法就非常有效了

10.setdefault:获得给定键相关联的值

类似于get方法,能够获得与给定键相关联的值,除此之外,setdefault还能在字典中不含有给定键的情况下设定相应的键值

>>> d = {}
>>> d.setdefault(‘name‘,‘N/A‘)
‘N/A‘
>>> d
{‘name‘: ‘N/A‘}

>>> d[‘name‘] = ‘Gumby‘
>>> d.setdefault(‘name‘,‘N/A‘)
‘Gumby‘
>>> d
{‘name‘: ‘Gumby‘}

可以看到,当键不存在时,setdefault返回默认值并且相应的更新字典。如果键存在,那么就返回与其对应的值,但不改变字典。默认值是可选的,这点和get一样,如果不设定,就会使用None

>>> d = {}
>>> d.setdefault(‘name‘,[]).append(my_sister)
>>> d
{‘name‘: [‘Anne‘]}
>>> d.setdefault(‘name‘,[]).append(‘my_sister‘)
>>> d
{‘name‘: [‘Anne‘, ‘my_sister‘]}

11.update:利用一个字典项更新另一个字典

例:

>>> d = {‘name‘:‘Gumby‘,‘age‘:42,‘address‘:‘BeiJing‘}
>>> x = {‘name‘:‘Lily‘}
>>> d.update(x)
>>> d
{‘age‘: 42, ‘name‘: ‘Lily‘, ‘address‘: ‘BeiJing‘}  #d中的name值已随x更新
>>> x
{‘name‘: ‘Lily‘}

12.values与itervalues:返回字典中的值

values方法以列表的形式返回字典中的值,itervalues返回值得迭代器

4.3 小结

映射:映射可以使用任意不可变对象标识元素。最常用的类型是字符串和元组。python唯一内建的映射类型是字典

利用字典格式化字符串:可以通过在格式化说明符中包括名称(键)来对字典应用字符串格式化操作。当在字符串格式化中使用元组时,还需要对元组中的每一个元素都设定“格式化说明符”,在使用字典时,所用的说明符可以比在字典中用到的项少

字典的方法:

时间: 2024-11-10 15:19:32

python笔记04:字典的相关文章

Python笔记4_字典学习

#dict:字典以"{}"包围的以"键:值"数据集合 # 成员之间用","分隔 # 可包含任何数据类型,包括列表 # 无序,数据项可改变 # 键必须是为唯一的,值不必 dict1={'name':'sjl','age':20} #查看对象的类,或对象所具备的功能 print(dir(dict1)) #查看对象功能的详细信息 print(help(type(dict1))) #空字典和一个元素的字典建立 print('空字典:',{}) print

Python 笔记 #04# Methods

源:DataCamp datacamp 的 DAILY PRACTICE  + 日常收集. Methods String Methods List Methods 缺一 Methods You can think of methods as functions that "belong to" Python objects. String Methods # string to experiment with: room room = "poolhouse" # U

python笔记04函数

加了星号(*)的变量args会存放所有未命名的变量参数,args为元组:而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典. >>> def fun(a, b, *args, **kwargs): ... """可变参数演示示例""" ... print "a =", a ... print "b =", b ... print "ar

20180420学习python笔记:字典的使用

原文地址:https://www.cnblogs.com/beijingjiaotongdaxue/p/8893453.html

python 学习笔记 三 字典

字典 Python的高效的key/value哈希表结构叫做"dict", dict的内容可以写成一系列的key:value对并放入{ }中, 相当于: dict = {key1:value1, key2:value2, ...}, 一个空的字典就是俩个大括号{ }. 下面是从一个空字典创建字典以及一些关键点: 数字, 字符串和元组可以作为字典的key, value可以是任何类型(包括字典). ## Can build up a dict by starting with the the

Python笔记:替代case语句的字典和匿名函数(lambda)

在linux的shell中我们习惯使用case语句来做分支处理,然而Python中却省略了这个函数,经过多方查找,发现其实case语句在C语言中是通过查对应的hash表,来进行跳转的.在Python中我们可以通过三种方法来实现这种功能.1.字典:2.lambda:3.switch类. 1.字典 dictCase={'case1':func1,'case2':func2....'caseN':funcN} #注意字典中对应的是函数名,不要圆括号. 在调用的时候使用字典的get函数来实现defaul

玩蛇(Python)笔记之基础Part3

玩蛇(Python)笔记之基础Part1 一.集合 1.set 无序,不重复序列 {}创建,直接写元素 2.set功能 __init__()构造方法,,使用强制转换就会调用此方法 1 set1 = {'year', 'jiujiujiu'} 2 print(type(set1)) 3 # 创建集合 4 s = set() # 创建空集合 5 li = [11, 22, 11, 22] 6 s = set(li) set 3.集合的基本操作 1 # 操作集合 2 s1 = set() 3 s1.a

整理python笔记

1.python笔记:while.if.for.编码 2.  模拟登陆 3.  python笔记:字符.列表.字典.元祖.数据类型

玩蛇(Python)笔记之基础Part2

玩蛇(Python)笔记之基础Part2 一.列表 1.列表 别的语言叫数组 python牛逼非要取个不一样的名字 1 age = 23 2 name = ["biubiubiu", "jiujiujiu", 22, age] 3 # namecopy = name 4 # namecopy.pop() 5 print(name) 6 # print(namecopy) List 2.列表取值 正常index 从零开始,,取倒数加负号 倒数第一就是[-1] 3.列表