记不记得小学如何查字典呢
先查索引,然后通过索引查找相应的内容,简单、方便、快捷。
出于这种需求,Python 也提供了这样一种数据类型 - dict,翻译为中文就是“字典”。
一.字典的定义
1.空字典的建立
{ }
dict ( )
dict_1 = {}
dict_2 = dict()
print(type(dict_1),type(dict_2))
<class 'dict'> <class 'dict'>
2.注意
key 必须是唯一的,不可变数据类型(str、tuple)
value值可以是任意数据类型: int,float,long, complex, list, tuple,set, dict
可变数据类型:list, set, dict
不可变数据类型: 数值类型,str, tuple
3.字典的创建
要创建字典,需要将所有项(元素)放在花括号({}
)内,以逗号(,
)分隔。其中,每个元素都以 key:value 对的形式出现,key 和 value 可以是任何数据类型。
d1 = {} #空字典
d2 = {1:'terStegen',2:'Semedo',3:'Pique'} #key值为整形
d3 = {'team':'fcb',3:'Pique'} #key值为混合型
d4 = dict([(1,'terStegen'),(2,'Semedo'),(3,'Pique'),(4,'Rakitic'),(5,'Busquets')]) #序列转换为字典
print(d1,d2,d3,d4)
{} {1: 'terStegen', 2: 'Semedo', 3: 'Pique'} {'team': 'fcb', 3: 'Pique'} {1: 'terStegen', 2: 'Semedo', 3: 'Pique', 4: 'Rakitic', 5: 'Busquets'}
进阶:
字典的嵌套
fcb = {
'1' : {
'name' : 'terStegen',
'country' : 'Germany',
'age' : 26
},
'2' : {
'name' : 'Semedo',
'country' : 'Portugal',
'age' : 24
}
}
print(fcb)
{'1': {'name': 'terStegen', 'country': 'Germany', 'age': 26}, '2': {'name': 'Semedo', 'country': 'Portugal', 'age': 24}}
字典的访问 :
通过工厂函数创建字典:
cardInfo = dict(user1 = '000000',user2 = '000000',user3 = '000000')
print(cardInfo)
{'user1': '000000', 'user2': '000000', 'user3': '000000'}
初始化所有value值: fromkeys( )
fromkeys第一个参数可以列表/tuple/str/set, 将列表的每一个元素作为字典的key值
生成100个卡号,并生成秘密:
for cardId in range(100):
card = "110 112233 %.3d" %(cardId+1)
cards.append(card)
print({}.fromkeys(cards,'888888'))
{'110 112233 001': '888888', '110 112233 002': '888888', '110 112233 003': '888888',....
4.字典和列表(或其它序列)之间的区别:
- 列表是对象的有序集合,而字典是无序集。
- 对于列表(其他复合数据类型也一样)来说,元素只有值;而对于字典,元素由 key:value 对的形式组成。
- 字典中的元素通过 key 来访问,而非通过他们的位置来访问(主要区别)。
二.字典的特性
字典不支持序列数据类型(例如:字符串、元组和列表)的序列操作,例如:索引
切片、连接(+
)、重复(*
)等。
1.成员操作符:in / not in
print('Pique' in FCB)
True
print('Villa' in FCB)
False
print('Villa' not in FCB)
True
print('31' not in FCB)
True
2.for循环,默认遍历字典的key值
for i in FCB:
print(i)
Vidal
Pique
Perdo
Rakitic
Suarze
Semedo
Busquets
3.for(循环枚举)
FCB = dict(terStegen=1,Semedo=2,Pique=3)
for number,player in enumerate(FCB):
print("%s:%s" %(number+1,player))
1:terStegen
2:Semedo
3:Pique
三.字典的增加或更改
字典是可变的,可以添加新元素,也可以使用赋值运算符(=
)更改现有元素的值。
如果 key 存在,value 将被更新;否则,新的 key:value 对会被添加到字典中。
1.添加或者更改key-value对
FCB = dict(terStegen=1,Semedo=2,Pique=3)
FCB['7'] = 'Villa'
FCB
{'terStegen': 1, 'Semedo': 2, 'Pique': 3, '7': 'Villa'}
FCB['7'] = 'Coutinho'
FCB
{'terStegen': 1, 'Semedo': 2, 'Pique': 3, '7': 'Coutinho'}
2.dict.update({.....})
如果key值已经存在, 更新value值,
如果key值不存在, 添加key-value值.
FCB
{'terStegen': 1, 'Semedo': 2, 'Pique': 3, '7': 'Coutinho'}
FCB.update({'8':'Arthur'})
FCB
{'terStegen': 1, 'Semedo': 2, 'Pique': 3, '7': 'Coutinho', '8': 'Arthur'} ##增加key-values
FCB.update({'8':'Instead'})
FCB
{'terStegen': 1, 'Semedo': 2, 'Pique': 3, '7': 'Coutinho', '8': 'Instead'} ##更新value值
3.dict.setdefault()
如果key值已经存在, 不做修改;
如果key值不存在, 添加key-value值;默认情况下value值为None
FCB
{'terStegen': 1, 'Semedo': 2, 'Pique': 3, '7': 'Coutinho', '8': 'Instead'}
FCB.setdefault('10','Messi')
'Messi'
FCB
{'terStegen': 1, 'Semedo': 2, 'Pique': 3, '7': 'Coutinho', '8': 'Instead', '10': 'Messi'}
四.字典的删除
1.dict . pop(key值):用 key 删除元素并返回其 value
FCB.pop('8')
'Instead'
FCB
{'terStegen': 1, 'Semedo': 2, 'Pique': 3, '7': 'Coutinho', '10': 'Messi'}
2.dict.opitem( ):删除并返回一个任意元素
FCB
{'terStegen': 1, 'Semedo': 2, 'Pique': 3, '7': 'Coutinho', '10': 'Messi'}
FCB
{'terStegen': 1, 'Semedo': 2, 'Pique': 3, '7': 'Coutinho', '10': 'Messi'}
FCB.popitem()
('10', 'Messi')
FCB.popitem()
('7', 'Coutinho')
3.del dict [ key ]:删除指定某一元素
FCB
{'terStegen': 1, 'Semedo': 2, 'Pique': 3, '8': 'Arthur', '10': 'Messi'}
del FCB['10'] #删除元素
FCB
{'terStegen': 1, 'Semedo': 2, 'Pique': 3, '8': 'Arthur'}
4.dict.clear( ):清空/删除所有项
FCB
{'terStegen': 1, 'Semedo': 2, 'Pique': 3, '8': 'Arthur'}
FCB.clear()
FCB
{}
四.字典的修改和查看
1.查看字典里面所有的key值
dict.keys( )
2.查看字典里面所有的value值
dict.values( )
3.查看字典里面所有的key-value值
dict.items( )
FCB = {'terStegen':1,'Semedo':2,'Pique':3,'Rakitic':4}
print(FCB.keys()) ##查看字典里面所有的key值
dict_keys(['terStegen', 'Semedo', 'Pique', 'Rakitic'])
print(FCB.values()) ##查看字典里面所有的values值
dict_values([1, 2, 3, 4])
print(FCB.items()) ##查看字典里面所有的key-value值
dict_items([('terStegen', 1), ('Semedo', 2), ('Pique', 3), ('Rakitic', 4)])
4.遍历
for k,v in FCB.items():
print(k,'----->',v)
terStegen -----> 1
Semedo -----> 2
Pique -----> 3
Rakitic -----> 4
5.查看指定key对应的value值
1)dict[key值]
FCB = {'terStegen':1,'Semedo':2,'Pique':3,'Rakitic':4}
print(FCB['Semedo'])
2
注意: key不存在, 就会报错
2)dict.get(key)
print(FCB.get('Semedo'))
2
五.通过字典间接实现switch语句
scores = {
'A':'优秀',
'B':'合格',
'C':'合格',
'D':'不及格'
}
garde = input("请输入等级:")
if garde in scores:
print (scores.get(garde))
else:
print ('error')