08 - 字典
一.字典的优势(dict)
-
一个元素位既能存储多个数据,还能在访问元素时很方便就能定位到需要的那个元素
-
在习惯上:
- 列表更适合保存多个商品、多个姓名、多个时间,这样的相似数据;
- 字典更适合保存一个商品的不同信息、一个人的不同信息,这样的不同数据。
二.字典的使用
-
定义字典的格式:
{键1:值1, 键2:值2, 键3:值3, ..., 键n:值n}
-
说明:
-
字典中找某个元素时,是根据键名(就是冒号:前面的那个值,例如上面代码中的'name'、'id'、'sex')
-
字典是不能通过下标或者切片去查找的
-
字典的每个元素由2部分组成,键:值。
例如 'name':'班长' ,'name'为键,'班长'为值
-
键可以使用字符串、数字、布尔值、元组等不可变数据类型,但是一般习惯使用字符串
-
每个字典里的key都是唯一的,如果出现了多个key,后面的value会覆盖前一个key对应的value.
-
三.字典的相关操作
1.查询元素
-
直接使用['key']值去查找元素的value(不常用)
info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国上海'} info['name'] #字典使用键来获取对应的值 info2 = {'name':'班长','age':18} # print(info['sex']) #获取不存在的key,会发生异常 -
使用get:根据key得到value
info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国上海'} value = info.get('name') #班长 info.get('id1') #None info.get('sex1','无') #无推荐使用:可以避免报错,没有key会返回默认值None,也可以自己设置,更加灵活
-
values:获取字典中所有的value。返回值是所有value组成列表的dict_values----就可以理解成存放到一个列表中
book = {'书名': '三体', '作者': '刘慈欣', '价格': 40} print(book.values()) #dict_values(['三体', '刘慈欣', 40]) for i in book.values(): #可以理解成values()放回的是列表,所以for循环一个一个从列表中将value取出来 print(i,end=' ') #三体 刘慈欣 40 -
keys:获取字典所有的key----可以理解为将结果存放到一个列表中
book = {'书名': '三体', '作者': '刘慈欣', '价格': 40} print(book.keys()) #dict_keys(['书名', '作者', '价格']) -
item:详见4
2.添加元素/修改元素
-
如果在使用 变量名['键'] = 值 时,这个“键”在字典中不存在,那么就会新增这个元素(键:值)
info = {'name':'班长'} info['id'] = 100 # 为不存在的键对应的值赋值就是添加元素 {'name': '班长', 'id': 100}所以键的名字是不可修改,只能添加新的键:值元素
-
如果键存在就会修改键对应的值
book = {}
book['书名'] = '三体' #字典添加元素
book['作者'] = '刘慈欣'
book['价格'] = 40
print(book)
#{'书名': '三体', '作者': '刘慈欣', '价格': 40}
book['价格'] *= 0.8 #字典修改元素
print(book)
#{'书名': '三体', '作者': '刘慈欣', '价格': 32.0}
-
setdefault:(不常用)只能做添加键值对元素使用
book = {'书名': '三体', '作者': '刘慈欣', '价格': 40} book.setdefault('出版社','人民出版社') #将元素添加到字典的末尾 -
update:实现两个字典的合并
book = {'书名': '三体', '作者': '刘慈欣', '价格': 40} source = {'出版社':'北京出版社','好评率':0.8} book.update(source) #将source字典合并到book字典的末尾 print(book) -
fromkey:根据key来创建字典,value只能写一个,写多个会当整体作为所有key的value
result = dict.fromkeys(['a','b','c'],1) print(result) #{'a': 1, 'b': 1, 'c': 1} result1 = dict.fromkeys(['a','b','c'],[1,2,3]) print(result) #{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}
3.删除元素
-
clear:清空整个字典
info = {'name':'monitor', 'id':100} info.clear() -
del:带参数表示删除指定元素,不带参数表示删除整个字典
info = {'name':'班长', 'id':100} del info['name'] #del 可以通过键删除字典里的指定元素 info = {'name':'monitor', 'id':100} del info #del 也可以直接删除变量 -
pop:根据key实现删除,删除的是键值对(整个元素)。有返回值----key对应的value
book = {'书名': '三体', '作者': '刘慈欣', '价格': 40} book.pop('价格') print(r) #40 print(book) #{'书名': '三体', '作者': '刘慈欣'} -
popitem:无参,默认是从后往前删,一次删除一个键值对。有返回值----key和value组成的键值对
-
举例:
''' book = {} 书名、价格、作者、出版社 借了两本书: books = [{},{}] 删除每一本书的出版社 最终打印books ''' books = [ {'name':'三体','price':40,'author':'刘慈欣','出版社':'北京出版社'}, {'name':'西游记','price':30,'author':'吴承恩','出版社':'上海出版社'} ] print(books) for book in books: book.pop('出版社') print(books)
4.字典的遍历
-
如果直接使用for .. in遍历字典,取出的是字典的key
book = {'书名': '三体', '作者': '刘慈欣', '价格': 40} for i in book: print(i,end=' ') #书名 作者 价格 -
items:获取键值对----可以理解成返回的是多个元组组成的列表
注意:通常我们都使用for k,v in book.items():的方式获取
原理:因为items取出来的都是一对一对的元素,刚好要赋值给k,v,那么python底层会自动将key和value分别赋给k,v变量
book = {'书名': '三体', '作者': '刘慈欣', '价格': 40} print(book.items()) #dict_items([('书名', '三体'), ('作者', '刘慈欣'), ('价格', 40)]) for i in book.items(): print(i) #结果: ''' ('书名', '三体') ('作者', '刘慈欣') ('价格', 40) ''' for k,v in book.items(): print(k) print(v) #print(k,v) #结果: ''' 书名 三体 作者 刘慈欣 价格 40 '''
四.字典相关例题
'''
books = [] 能放多本书
书:{}
书名 作者 价格
添加 三本书:
1.添加书不能添加重名书籍
'''
books = []
book = {}
while True:
if len(books) == 3:
break
print('请添加书%d:' % (len(books) + 1))
name = input('书名:')
for book in books: # 取出的是字典,当books列表为空时,就没有值赋给book,循环语句就不会进入
print(book.get('name'))
if name == book.get('name'):
print('不能添加重名的书籍')
break
else: # 当上面的for完整执行时进入else,如果有break或者没进去for就不进else
author = input('作者:')
price = input('价钱:')
book['name'] = name
book['author'] = author
book['price'] = price
books.append(book)
print('{}添加成功!'.format(name))
flag = False
print(books)
易错:取出的是字典,当books列表为空时,就没有值赋给book,循环语句就不会进入
五.字典推导式
-
和列表推导式类似,字典推导式是返回一个新的字典
#将字典中元素的键值对颠倒 dict1 = {'a' : 1,'b' : 2,'c' : 3} newdict = {v : k for k,v in dict1.items()} print(newdict)

浙公网安备 33010602011771号