Python-字典详细讲解:

本文将深入带你了解掌握字典的一些基础用法,同时在讲解中穿插一些错误典例,帮助你记忆。在掌握字典之后,也有助于掌握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']

好了以上就是关于字典的全部讲解,感谢您的观看,期待与您共同进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值