本文将深入带你了解掌握字典的一些基础用法,同时在讲解中穿插一些错误典例,帮助你记忆。在掌握字典之后,也有助于掌握collections模块中的defaultdict 子块,然后在后面的实际中运用。
1.1概述:
字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
temp_dict = {key1:val1, key2:val2, key3: val3}
值得注意的是:dict作为Python中的关键字和内置函数,变量名不建议用dict,并且,键一般是唯一的,如果重复,最后一个键的值会替换前面的,值不一定唯一
temp_dict = {'name' :'zhang_san', 'name' :'Li_si' }
#如果temo_dict['name'] = 'Li_se'
还要注意一个点如果直接访问一个键可以用 ' [ ] '但是如果该键不存在的话就会报错,因此我们可以用get,后面会提到。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
一个简单的字典实例:
temp_dict = {'name':'Zhang_san','age' : 91, 88 : 37,'Gender' : 'male'}
#以上都是合法的
1.2访问字典:
利用熟悉的方括号可以访问其中的值,
temp_dict = {'Name': 'Zhang_san', 'Age': 66, 'Class': 'First'}
print ("temp_dict['Name']: ", temp_dict['Name'])
print ("tempdict['Age']: ", temp_dict['Age'])
结果
temp_dcit['name'] : Zhangz_san
temo_dict['Age'] = 66
但是如果访问的字典里面美玉相应的键时,就会输出错误,于是我们可以用get
1.21方法一:get访问:
dict.get(key,default = None)
如果没有找到就返回—default ,default默认是None,但是如果你想返回其他你想返回的程序,也可以如下这样做
temp_dict = {'Name': 'Zhang_san', 'Age': 66, 'Class': 'First'}
def fun():
print('not in dictionary ')
temp_dict.get('gender', fun())
##结果是返回not in dictionary
甚至说如果没有找到,就想在里面添加以有个键值对,这个有相应的方法,下面会讲。
还有一种情形就是当值的类型是一个字典时,嵌套字典中get的使用如下实例:
temp_dict = {'name' : {'used_name' : 'zhang_sansan','cont_name':'zhang_san'}}
res = temp_dict.get('name', {}).get('used_name')
# 输出结果
print(res)
##结果是:'zhang_sansan'
1.22方法二:setdefault()访问:
Python 字典 setdefault() 函数和 get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值defalut。方法如下:
dict.setdefault(key, default=None)
temp_dict = {'Name': 'Zhang_san', 'Age': 66, 'Class': 'First'}
temp_dict.setdefault('gender', 'male')
1.23方法三:has_key:
Python 字典(Dictionary) has_key() 函数用于判断键是否存在于字典中,如果键在字典 dict 里返回 true,否则返回 false。
temp_dict = {'Name': 'Zara', 'Age': 7}
print "Value : %s" % temp_dict.has_key('Age')
print "Value : %s" % temp_dict.has_key('Sex')
'''
Python3不支持
'''
1.24方法四:Items:
Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。通常与for连用
temp_dict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}
print ("字典值 : %s" % temp_dict.items())
# 遍历字典列表
for key,values in temp_dict.items():
print key,values
#结果:
#字典值 : [('Google', 'www.google.com'), ('taobao', 'www.taobao.com'), ('Runoob', #'www.runoob.com')]
#Google www.google.com
#taobao www.taobao.com
#Runoob www.runoob.com
1.25方法五:key & values:
keys() 函数以列表返回一个字典所有的键。
temp_dict = {'Name': 'Zara', 'Age': 7}
print ("Value : %s" % temp_dict.keys())
#结果 : ['Age', 'Name']
values()函数则以列表返回字典中所有的值。同时也可以以想到很多地方都有values()函数,只是不同的类型方法有些不同。
temp_dict = {'Name': 'Zara', 'Age': 7}
print ("Value : %s" % temp_dict.values())
#结果 : [7, Zara]
1.26方法六:fromkeys():
fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
dict.fromkeys(seq[, value])
temp_dict = dict.fromkeys(['name','age','gender','salary'], 10)
print(temp_dict)
#结果:{'name': 10, 'age': 10, 'gender': 10, 'salary': 10}
1.27方法七:
update() 函数把字典 dict2 的键/值对更新到 dict 里。该方法没有任何返回值
temp_dict = {'Name': 'Zhang_san', 'Age': 66, 'Class': 'First'}
temp_dict2 = {'gender ': 'male'}
temp_dict.update(temp_dict2)
#结果是:{'Name': 'Zhang_san', 'Age': 66, 'Class': 'First', 'gender ': 'male'}
1.3删除字典:
1.31方法八:clear():
clear() 函数用于删除字典内所有元素.其实不止是字典,很多地方都用的clear()来删除所有元素
temp_dict.clear()
1.32方法九:pop():
pop() 方法删除字典给定键 key 所对应的值,返回值为被删除的值。key是值要删除的键,default是指当key不存在时返回的值,你也可以定义一个函数输出 ‘ 这个键不存在! ’等相关语句。
注意:当key存在时就删除对应的元素,如果key不存在时返回指定的默认值,但是如果default没有指定的话会引发Keyeoor的错误。
pop(key[,default])
temp_dict = {'Name': 'Zhang_san', 'Age': 66, 'Class': 'First', 'gender ': 'male'}
element = temp_dict.pop('name')
print('删除的元素为:')
print(element)
print('字典为:')
print(temp_dict)
#结果:'KeyError' 此时有错,因为default没有设置默认值
以下是正确用法:
temp_dict = {'Name': 'Zhang_san', 'Age': 66, 'Class': 'First', 'gender ': 'male'}
element = temp_dict.pop('name','Not Found')
print(element)
print('字典为:')
print(temp_dict)
#结果:'zhang_san' { 'Age': 66, 'Class': 'First', 'gender ': 'male'}
1.33方法十:popitem():
popitem() 方法返回并删除字典中的最后一对键和值。如果字典已经为空,却调用了此方法,就报出 KeyError 异常。返回一个键值对的(key,value)的形式,因此从这也可以联想到解包所用的知识点
temp_dict = {'Name': 'Zhang_san', 'Age': 66, 'Class': 'First', 'gender ': 'male'}
element = temp_dict.popitem()
print(element)
#结果:('gender' : 'male')
1.4其他方法:
1.43方法十一:len:
len()函数在许多情况都有使用。len返回的是键的个数有两个键就返回2.
1.42方法十二:比较字典元素cmp():
cmp() 函数用于比较两个字典元素,如果两个字典的元素相同返回0,如果字典dict1大于字典dict2返回1,如果字典dict1小于字典dict2返回-1。
cmp(dict1, dict2)
字典的比较包含三个过程有顺序的过程如下:
(1) 比较字典的长度:如果字典的长度不同,那么用cmp(dict1,dict2)比较大小时,如果字典dict1比dict2长,cmp()返回1,如果dict2比dict1长,则返回-1。
(2) 比较字典的键:如果两个字典的长度相同,那么就比较字典的键;键的比较顺序和keys()方法返回键的顺序相同(相同的键会映射到哈希表的同一个位置,这就保证了对字典键的检查的一致性)。这时,如果两个字典的键不匹配时,对这两个键进行比较就可以了。如果dict1中的第一个不同的键大于dict2中的第一个不同键,cmp()返回同上。
(3)比较字典的值:如果两个字典的长度相同并且它们的键也相同,则用字典中每个相同的键所对应的的值进行比较。一旦出现不匹配的值,就可以对这两个字典进行比较了。如果dict1比dict2中相同的键所对应的值大,cmp()会返回正值。
在以上三者都相同的情况下返回0
1.43:方法十三:list():
大家可能会以为list是列表的内置函数,怎么会和字典挂钩呢,其实list处理字典,可以快速得到他的key的列表,如下:
list(temp_dict) #可以快速得到键
temp_dict = {'Name': 'Zhang_san', 'Age': 66, 'Class': 'First', 'gender ': 'male'}
res = temp_dict.values()
'''
结果是: res 是dict_values(['Zhang_san', 66, 'First', 'male'])
'''
res = list(temp_dict.values())
#结果是: res 是['Zhang_san', 66, 'First', 'male']
好了以上就是关于字典的全部讲解,感谢您的观看,期待与您共同进步!
231

被折叠的 条评论
为什么被折叠?



