Python中的Dict(字典)

字典(dictionary)是Python中另一个非常有用的内置数据类型。列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。在确保你能正确理解字典,它非常重要,你需要先参考:Python中的条件控制语句

字典是一种映射类型,它的元素是键值对。字典用 { } 包裹,它是一个无序的且包含 键(key) : 值(value) ,不包括空字典。键(key)必须使用不可变类型。每个键值对用分开。在同一个字典中,键(key)必须是唯一的。

创建一个字典有以下几种方式:


dict1={} #创建一个空字典

dict(a='a', b='b', t=1) #通过设置关键字,使用dict函数
{x: x**2 for x in (2, 4, 6)}  #构造字典,":"前面值为x,":"后面值为x*2 字典生成式
dict([('baidu', 1), ('Google', 2), ('Taobao', 3)]) #构造字典
dict(zip(['one', 'two', 'three'], [1, 2, 3]))   # 映射函数方式来构造字典

Python字典键的特性

字典是我们以后经常需要使用的类型,所以基础需要打牢固,那么字典键的特性非常重要:

  • 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住。
  • 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。

对应每一条特性,我们以下面的两个代码演示说明:

dict1={'name':'e1yu','name':'zjj','age':18}
print(dict1) #{'name': 'zjj', 'age': 18}
dict1={ ["name"]:"e1yu","url":"e1yu" }  #这个实例会直接报错,字典里面的键不能是列表,但是值可以为列表
dict1={ "name":["e1yu","url","e1yu"] }

Python字典内置函数

函数描述
clear()
删除字典内所有元素
copy()
返回一个字典的浅复制
fromkeys(seq,val)
创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
get(key, default=None)
返回指定键的值,如果值不在字典中返回default值
key in dict
如果键在字典dict里返回true,否则返回false
items()
以列表返回可遍历的(键, 值) 元组数组
keys()
返回一个迭代器,可以使用 list() 来转换为列表
setdefault(key,default=None)和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
update(dict2)
把字典dict2的键/值对更新到dict里
values()
返回一个迭代器,可以使用 list() 来转换为列表
pop(key[,default])
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
popitem()
随机返回并删除字典中的最后一对键和值。

有关字典的一些使用案例

clear()方法很简单不再演示,copy()方法需要重点学习,可参考:深拷贝和浅拷贝详解,我们先来看一下fromkeys()方法,它是dict中的一个方法:

print(dict.fromkeys(['e1yu','zjj','wff'],'最全的教程集合'))
#{'e1yu': '最全的教程集合', 'zjj': '最全的教程集合', 'wff': '最全的教程集合'}
get()
dict1=dict( [('www.e1yu.com','最全的教程集合'),('a','a'),('b','b'),('c',1)] ) #创建字典
print(dict1.get('www.e1yu.com')) #获取键为www.e1yu.com的值,如果不存在返回None
print(dict1.get('f'),'不存在f')

如果key不存在,可以返回None,或者自己指定的value。你不要用get来获取值,这样没有意义。

key in dict
dict1=dict( [('www.e1yu.com','最全的教程集合'),('a','a'),('b','b'),('c',1)] ) #创建字典
if 'a' in dict1:
    print('字典dict1中存在键a')
items()

有时候我们呢需要对字典进行循环打印出键和对应的值,通常有下面的两种方式:

dict1=dict( [('www.e1yu.com','最全的教程集合'),('a','a'),('b','b'),('c',1)] ) #创建字典
for k,v in dict1.items(): #键、值
    print(k,v)
for i in dict1: #单独打印i的话,就是循环打印字典中的key
    print(i,dict1[i]) #通过key,获取value
keys()和values()
dict1=dict( [('www.e1yu.com','最全的教程集合'),('a','a'),('b','b'),('c',1)] ) #创建字典
print(list(dict1.keys())) #返回dict1中所有的键,并存入list列表
print(list(dict1.values())) #返回dict1汇总所有的值,并存入list列表
print(type( dict1.keys() ),type(dict1.values()) ) #<class 'dict_keys'> <class 'dict_values'>
pop()和popitem()
dict1=dict( [('www.e1yu.com','最全的教程集合'),
             ('a','a'),('b','b'),('c',1),]) #创建字典

del dict1['a'] #删除
dict1.pop('b') #删除
dict1.popitem() #不带参数为随便删除

print(dict1)
setdefault()
dict1=dict( [('www.e1yu.com','最全的教程集合'),
             ('a','a'),('b','b'),('c',1),]) #创建字典

dict1.setdefault('name','zjjsb') #该方法会从dict里面寻找是否存在,存在就返回原值,不存在就创建后面的值
print(dict1)
update()
dict1=dict( [('www.e1yu.com','最全的教程集合'),
             ('a','a'),('b','b'),('c',1),]) #创建字典
dict2={'name':'zjj','age':18}
dict1.update(dict2) #将dict2字典和dict1字典融合,若字典存在交叉,则更新字典
print(dict1) #{'www.e1yu.com': '最全的教程集合', 'a': 'a', 'b': 'b', 'c': 1, 'name': 'zjj', 'age': 18}

– END –

发表评论

后才能评论