字典是一种通过名字引用值的数据结构。这种结构类型称为映射。字典是Python中唯一内建的映射类型
字典中的值并没有特殊的顺序,都存储在一个特定的键(Key)里,键可以是数字、字符串甚至是元组
1.创建
使用dict函数,通过其他映射(比如其他字典)或者(键、值)这样的序列对建立字典
也可以通过关键字参数来创建字典
2.基本字典 *** 作
字典的基本行为在许多方面与序列类似:
len(d) 返回d中项(键-值对)的数量
d[k] 返回关联到键k上的值
d[k]=v 将值v关联到键k上
del(d[k]) 删除键为k的项
k in d 检查d中是否含有键为k的项
但也有下面一些重要的区别
键类型:字典的键不一定为整型数据,也可能是其他不可变类型,比如浮点型,字符串或者元组
自动添加:即使那个键起初在字典中并不存在,也可以为它分配一个 值,这一字典就会建立新的项,而(在不使用append方法或者其他类似 *** 作的情况下)不能将值关联到列表范围之外的索引上
成员资格:表达式k in d(d为字典)查找的是键,不是键值,表达式v in l(l为列表)则用来查找值,而不是索引
1 people = { 2 ‘Alice‘: { 3 ‘phone‘: ‘2341‘, 4 ‘addr‘: ‘Foo drive 23‘ 5 }, 6 7 ‘Beth‘: { 8 ‘phone‘: ‘9102‘, 9 ‘addr‘: ‘bar street 42‘10 },11 12 ‘Cecil‘: {13 ‘phone‘: ‘3158‘,14 ‘addr‘: ‘Baz avenue 90‘15 }16 }17 18 labels = {19 ‘phone‘: ‘phone number‘,20 ‘addr‘: ‘address‘21 }22 23 name = input(‘name: ‘)24 request = input(‘Phone number (p) or address (a)? ‘)25 26 if request == ‘p‘: key = ‘phone‘27 if request == ‘a‘: key = ‘addr‘28 29 if name in people: print("%s‘s %s is %s." % (name,labels[key],people[name][key]))
3.字典的格式化字符串
使用字典而不是元组来做这个工作时,在每个转换说明符中的%字符后面,可以加上(圆括号括起来的)键,后面再跟上其他的说明元素
除了增加的字符串键之外,转换说明符还是像之前一样
以这种方式使用字典的时候,只要给出的键在字典中找到,就可以获得任意数量的转换说明符,这类字符串格式化在模板系统中非常有用
1 template = ‘‘‘<HTML>2 <head><Title>%(Title)s</Title></head>3 <body>4 <h1>%(Title)s</h1>5 <p>%(text)s</p>6 </body>‘‘‘7 8 data = {‘Title‘: ‘My Home Page‘,‘text‘: ‘Welcome to my home page!‘}9 print(template % data)
4.字典方法
clear() 清除字典中的所有项,这个方法无返回值(返回None)
考察以下两种情况
两种情况中,x和y最初对应同一个字典。情况1中,通过将x关联到一个新的空字典来”清空“它,这对y一点影响都也没有,它还关联到原先的字典。
但如果真的想清空原始字典中的所有元素,必须使用clear方法
copy() 返回一个具有相同键-值对的新字典(这个方法实现的是浅复制,因为值本身就是相同的,而不是 副本)
副本中替换值的时候,原始字典不受影响,但是如果修改了某个值(原地修改,而不是替换)原始的字典也会改变,因为同样的值也存储在原字典中
可以使用深复制来避免这一问题,复制其包含的所有值,可以使用copy模块的deepcopy函数来完成 *** 作
fromkeys() 使用给定的键建立新的字典,每个键默认对应的值为None
也可以直接在所有字典的类型dict上面调用方法
也可以自己提供默认值
get() 一种更宽松的访问字典项的方法,一般来说,在试图访问字典中不存在的项时会出错,但是在使用get()时就不会
当使用get()访问一个不存在的键时,没有任何异常,得到了None值,还可以自己定义”默认”值,来替换None;如果键存在,get()用起来就像普通的字典查询一样
get()可以使得程序在用户输入未准备的值时也能做出合理的反应,下面是电话簿程序使用get()方法的版本
1 people = { 2 ‘Alice‘: { 3 ‘phone‘: ‘2341‘,20 ‘addr‘: ‘address‘21 }22 23 name = input(‘name: ‘)24 request = input(‘Phone number (p) or address (a)? ‘)25 26 key = request27 if request == ‘p‘: key = ‘phone‘28 if request == ‘a‘: key = ‘addr‘29 30 person = people.get(name,{})31 label = labels.get(key,key)32 result = person.get(key,‘not available‘)33 34 35 print("%s‘s %s is %s." % (name,label,result))
has_key 与k in d 是一样的,python3中不包括这个函数
items() 以列表形式返回可遍历的(键,值) 元组数组
keys() 以列表形式返回字典中的键
values() 以列表形式返回字典中的值
setdefault() 类似get()方法,能够获得与给定键相关联的值
当键不存在的时候,setdefault()返回默认值并且相应地更新字典。如果键存在,那么就返回与其对应的值,但不改变字典
默认值是可选的,如果不设定,就默认使用None
pop() 用来获得给定键的值,然后将这个键-值对从字典中移除
popitem() d出字典中最末尾的项,在希望一个接一个地移除并处理项时,很有用(因为不用首先获取键的列表)
如果字典已经为空,而使用了此方法,会报出KeyError异常
update() update()可以利用一个字典项更新另外一个字典
提供的字典中的项会被添加到旧的字典中,若有相同的键则会进行覆盖
总结以上是内存溢出为你收集整理的Python 字典全部内容,希望文章能够帮你解决Python 字典所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)