您的位置:首页 > 编程语言 > Python开发

Python入门(4):创建和使用字典

2018-02-25 15:20 351 查看
通过名字来引用值的数据结构称为映射。字典是Python中唯一内建的映射类型。字典中的值并没有特殊的顺序,但是都存储在一个特定的键下。键可以是数字、字符串甚至是元组。
1、字典与列表
某些情况下,字典比列表更适用,比如:
1)表示一个游戏棋盘的状态,,每个键都是由坐标值组成的元组;
2)存储文件修改时间,用文件名作为键;
3)数字电话/地址簿。
用列表可以建立电话簿,但不实用。names=['Alice','Beth','Cecil','Dee-Dee','Earl']
numbers=['2341','9102','3258','0142','5551']
print(numbers[names.index('Cecil')]) #32582、字典的创建
字典由多个键及与其对应的值构成的键-值对组成(我们也把键-值对称为项)。每个键和它的值之间用冒号(:)隔开,项之间用(,)隔开,整个字典由一对大括号括起来。空字典(不包括任何项)由两个大括号组成,即:{}。
也可用dict(),通过其他映射(比如其他字典)或者(键、值)对的序列建立字典。
Remark:dict()还能以映射作为参数,建立其项与映射相同的字典。若不带任何参数,则dict返回一个新的空字典。若另一个映射也是字典,也可使用下面的字典方法copy。phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'}
print(phonebook['Cecil']) #3258

items=[('name','Gumby'),('age',42)]
d=dict(items)
print(d) #{'age': 42, 'name': 'Gumby'}
print(d['name']) #Gumby

d=dict(name='gumby',age=42)
print(d) #{'age': 42, 'name': 'gumby'}3、基本字典操作
字典的基本行为在很多方面与序列类似:
1)len(d):返回d中项(键-值对)的数量;
2)d[k]:返回关联到键k上的值;
3)d[k]=v:将值v关联到键k上;
4)del(d[k]):删除键为k的项;
5)k in d:检查d中是否有含有键为k的项。
但字典和列表也有一些重要区别:
1)键类型:字典的键不银锭为整型数据(但也可以是),键可以是任意的不可变类型,比如浮点型(实型)、字符串或元组;
2)自动添加:即使键期初在字典中并不存在,也可以为它赋值,在字典中建立新的项,而列表是不能将值关联到列表范围之外的索引上的;
3)成员资格:表达式k in d(d为字典)查找的是键,不是值,而表达式v in l(l为列表)则用来插值值,不是索引。
4、字典的格式化字符串
只要所有给出的键都能在字典中找到,就可以使用任意数量的转换说明符。phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'}
print("Cecil's phone number is %(Cecil)s." % phonebook) #Cecil's phone number is 3258.

template='''<html>
<head><title>%(title)s</title></head>
<body>
<h1>%(title)s</h1>
<p>%(text)s</p>
</body>'''
data={'title':'My Home Page','text':'Welcome to my home page!'}
print(template % data)
#<html>
#<head><title>My Home Page</title></head>
#<body>
#<h1>My Home Page</h1>
#<p>Welcome to my home page!</p>
#</body>5、字典方法
1)clear:清除字典中所有的项。无返回值(或者说返回None)。
2)copy:返回一个具有相同键-值对的新字典(实现的是浅复制,即:在副本中替换值时,原始字典不受影响,但若修改了某个值(原地修改),原始字典也会改变,因为同样的值也存储在原字典中)。
注意,深复制可避免这一问题,用copy模块的deepcopy()完成。
3)fromkeys:使用给定的键建立新的字典,每个键都对应一个默认的值None,也可以自己提供默认值。
4)get:更宽松的访问字典项的方法。当使用get访问一个不存在的键时,没有任何异常,而得到None值,还可自定义“默认”值替换None;若键存在,则get用起来就像普通的字典查询一样。
5)items:把字典所有的项以列表方式返回,列表中的每一项都表示为(键,值)对的形式,但是项在返回时没有特定的次序。
6)keys:将字典中的键以列表形式返回。
7)pop:用来获得对应于给定键的值,然后将这个键-值对从字典中移除。
8)popitem:类似于list.pop,不同的是list.pop会弹出列表的最后一个元素,而popitem弹出随机项昂,因为字典并没有“最后的元素”级或者其他有关顺序的概念。若想一个接一个地移除并处理项,这个方法就非常有效。
9)setdefault:某种程度上类似于get方法,能够获得与给定键相关联的值。此外,还能在字典中不含有给定键的情况下设定相应的键值。当键不存在时,setdefault返回默认值并且相应地更新字典;若键存在,则返回与其对应的值,但不改变字典。默认值可自定义,若不设定,则默认使用None。
10)update:利用一个字典项更新另外一个字典。提供的字典中的项会被添加到就的字典中,若有相同的键则会进行覆盖。
11)values:以列表形式返回字典中的值。与返回键的列表不同的是,返回值的列表中可以包含重复的元素。#1
d={}
d['name']='Gumby'
d['age']=42
print(d)
returned_value=d.clear() #{'name': 'Gumby', 'age': 42}
print(d) #{}
print(returned_value) #None

x={}
y=x
x['key']='value'
print(y) #{'key': 'value'}
x={}
print(y) #{'key': 'value'}

x={}
y=x
x['key']='value'
print(y) #{'key': 'value'}
x.clear()
print(y) #{}

#2
x={'username':'admin','machines':['foo','bar','baz']}
y=x.copy()
y['username']='mlh'
y['machines'].remove('bar')
print(y) #{'username': 'mlh', 'machines': ['foo', 'baz']}
print(x) #{'username': 'admin', 'machines': ['foo', 'baz']}

from copy import deepcopy
d={}
d['names']=['Alfred','Bertrand']
c=d.copy()
dc=deepcopy(d)
d['names'].append('Clive')
print(c) #{'names': ['Alfred', 'Bertrand', 'Clive']}
print(dc) #{'names': ['Alfred', 'Bertrand']}

#3
print({}.fromkeys(['name','age'])) #{'name': None, 'age': None}
print(dict.fromkeys(['name','age'])) #{'name': None, 'age': None}
print(dict.fromkeys(['name','age'],'(unknown)')) #{'name': '(unknown)', 'age': '(unknown)'}

#4
d={}
print(d.get('name')) #None
print(d.get('name','N/A')) #N/A

d['name']='Eric'
print(d.get('name')) #Eric

#5,6
d={'title':'Python Web Site','url':'http://www.python.org','spam':0}
print(d.items()) #dict_items([('spam', 0), ('url', 'http://www.python.org'), ('title', 'Python Web Site')])
print(d.keys()) #dict_keys(['spam', 'url', 'title'])

#7
d={'x':1,'y':2}
print(d.pop('x')) #1
print(d) #{'y': 2}

#8
d={'title':'Python Web Site','url':'http://www.python.org','spam':0}
print(d.popitem()) #('spam', 0)
print(d) #{'url': 'http://www.python.org', 'title': 'Python Web Site'}

#9
d={}
print(d.setdefault('name','N/A')) #N/A
print(d) #{'name': 'N/A'}
d['name']='Gumby'
print(d.setdefault('name','N/A')) #Gumby
print(d)
908c
#{'name': 'Gumby'}

#10
d={'title':'Python Web Site','url':'http://www.python.org','changed':'Mar 14 22:09:15 MET 2008'}
x={'title':'Python Language Website'}
d.update(x)
print(d)
#{'url': 'http://www.python.org', 'title': 'Python Language Website', 'changed': 'Mar 14 22:09:15 MET 2008'}

#11
d={}
d[1]=1
d[2]=2
d[3]=3
d[4]=1
print(d.values()) #dict_values([1, 2, 3, 1])
以上。参考书是Magnus Lie Hetland著的《Python基础教程(第2版·修订版)》Chapter 4。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python 基础知识