一、字典
1.结构介绍
•在字典存放的每个元素都是一对儿键值对
•在python中 字典通常被称为dict,键 称为key
•字典中不可以存在相同的key,但是value可以
2.字典的基本操作
创建空字典
>>> dict1 = {}
>>> type(dict1)
<class 'dict'> # dict 类型 就是字典
添加修改或更新字典内容
一、添加修改 ' = '
>>> dict1[ 'qwer' ] = 1
>>> dict1
{'qwer': 1}
>>> dict1[ 'li' ] = [ 1,3,5 ] # 添加列表
>>> dict1
{'qwer': 1, 'li': [1, 3, 5]}
二、更新字典内容 ' update '
>>> dict1.update( { 'df':2 } )
>>> dict1
{ 'qwer': 1, 'li': [1, 3, 5], 'df': 2 }
>>> d6 = { 'name':'时辰' }
>>> dict1.update(d6) # 添加d6 字典中的key和value
>>> dict1
{ 'qwer': 1, 'li': [1, 3, 5], 'df': 2, 'name': '时辰' }
注意:' = ' 和 ' update '
添加或更新字典的内容时,相同的key,它的值(value)会被新的值替代(覆盖)。
python-3.5+
>>> x = {'x':10}
>>> y = {'y':20}
>>> z = { **x,**y }
>>> z
{'x': 10, 'y': 20}
转换为字典
>>> d1 = [ ('1','q'),('2','w'),('3','e'),('4','r') ]
>>> dict2 = dict(d1)
>>> dict2
{'1': 'q', '2': 'w', '3': 'e', '4': 'r'}
>>> d2 = [ '1q','2w','3e','4r' ]
>>> dict3 = dict(d2)
>>> dict3
{'1': 'q', '2': 'w', '3': 'e', '4': 'r'}
>>> dict2 == dict3
True
>>> dict2 is dict3
False
注意:这种转换类型中的每个元素都必须是成对出现的。
二、字典的key
key通常是字符串,还可以是python中任意的不可变类型
哪些数据可以作为字典的key
• 布尔型 True 1 False 0
• 整型 100 200
• 浮点型 1.0 3.415
• 元组 (1,2,3)
• 字符串 'id_name'
• 列表是不能成为字典的key的
在python中可以通过 hash() 函数来验证数据是否能作为key
>>> hash(True) # 布尔值
1 # 如果返回的是一个整数,它就可以作为字典的key
>>> hash(1.0) # 浮点数
1
>>> hash(100) #整数
100
>>> hash( (1,2,3) ) # 元组
2528502973977326415
>>> hash( 'id_name' ) # 字符串
6419225711378090061
>>>
>>> hash( [1,2,3] ) # 列表,下面是报错信息
Traceback (most recent call last):
File "", line 1, in
TypeError: unhashable type: 'list'
>>>
key对应的value
>>> dict2
{'1': 'q', '2': 'w', '3': 'e', '4': 'r'}
>>> dict2['1'] # 这样使用,key必须存在,不然会报错
'q'
>>> dict2.get('1') # 获取到 '1' 对应的值(value)
'q'
>>> v = dict2.get('5') # 获取dict2中key为' 5 '对应的值
>>> type( v ) # key不存在字典中,则返回None
<class 'NoneType'>
>>> dict2.get('5','f') # 同时查找两个, ' 5 ' 存在,则返回' 5 '对应的值
'f' # ' 5 ' 不存在,则返回后面指定的 ' f '
获取字典中的key
.keys()
>>> dict2
{'1': 'q', '2': 'w', '3': 'e', '4': 'r'}
>>> dict2.keys() # 列出字典dict2中所有的key
dict_keys(['1', '2', '3', '4'])
>>> d3 = dict2.keys()
>>> list(d3)
['1', '2', '3', '4']
循环输出字典中的key
>>> for key in dict2.keys():
... print(key)
...
1
2
3
4
获取字典中value
.values()
>>> dict2.values()
dict_values(['q', 'w', 'e', 'r'])
>>> d4 = dict2.values() # 列出字典dict2中所有的value
>>> list(d4)
['q', 'w', 'e', 'r']
循环输出字典中的value
>>> for v in dict2.values():
... print(v)
...
q
w
e
r
同时获取字典中的key和value
.items()
>>> dict2
{'1': 'q', '2': 'w', '3': 'e', '4': 'r'}
>>> dict2.items()
dict_items([('1', 'q'), ('2', 'w'), ('3', 'e'), ('4', 'r')])
循环输出字典中的key和value
>>> for k,v in dict2.items():
... print(k,v)
...
1 q
2 w
3 e
4 r
key和value的判断
>>> x = {'x':10}
>>> 'x' in x # 判断'x' 是否是字典x中的keys()
True
>>> 'x' in x.keys()
True
>>> 'y' in x.values() # 判断'y'是否存在于字典中的values()
False
删除和清空字典
删除指定的键值对
>>> d1
{'1': 'q', '2': 'w', '3': 'e', '4': 'r'}
>>> del d1['1'] # 从字典中删除key为'1'的键值对
>>> d1
{'2': 'w', '3': 'e', '4': 'r'}
>>> del d1 # 删除d1字典,字典自身从内存中删除
清空字典
>>> d2
{'1': 'q', '2': 'w', '3': 'e', '4': 'r'}
>>> d2 = {} # 直接赋予空值
>>> d2
{}
>>> d3
{'1': 'q', '2': 'w', '3': 'e', '4': 'r'}
>>> d3.clear() # 清空字典,字典还在,内容被清空
>>> d3
{}
.pop() 删除指定key的键值对,并返回key对应的值
>>> d5
{'2': 'w', '3': 'e', '4': 'r'}
>>> s = d5.pop('2') # 删除d5中key为'2'的键值对, 并将返回值指定给s
>>> d5
{'3': 'e', '4': 'r'}
>>> s # 输出s,得到'w'
'w'
三、实现swith...case 语句
Python 中没有 switch … case 语句,这个问题Python之父龟叔表示这个语法过去没有,现在没有,以后也不会有。因为Python简洁的语法完全可以用 if … elif 实现。如果有太多的分支判断,还可以使用字典来代替。
例子一:
while True:
print("输入q退出")
num = input(">>>:")
if num == '0':
print("zero")
elif num == '1':
print('one')
elif num == '2':
print('two')
elif num == 'q':
print('退出')
break
else:
print('请输入数字')
优化版
data = {
'0':'zero',
'1':'one',
'2':'two',
}
while True:
print("输入q退出")
num = input(">>:")
if num in data:
print(data.get(num))
elif num == 'q':
break
else:
print('输入错误')