翼度科技»论坛 编程开发 python 查看内容

python笔记:第四章使用字典

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
1.1 概述

说白了就是键值对的映射关系
不会丢失数据本身关联的结构,但不关注数据的顺序
是一种可变类型
  1. 格式:dic = {键:值, 键:值}
复制代码

  • 键的类型:字典的键可以是任何不可变的类型,如浮点数,字符串,元组
1.2 函数dict

可以从其他映射或键值对创建字典
  1. items = [('name', 'Gumby'), ('age', 42)]
  2. d =dict(items)
  3. print(d)
  4. > {'name': 'Gumby', 'age': 42}
复制代码
  1. d = dict(name='Gumby', age=42)
  2. print(d)
  3. > {'name': 'Gumby', 'age': 42}
复制代码
1.3 字典的基本操作
  1. num = len(d) # 返回字典的键值对数量
  2. str1 = d[键] # 参数为键 返回值为对应的值
  3. d[键] = '值' # 将tom赋值给name1键
  4. test = 键 in 字典名字 # 检查name3键是否在字典中
复制代码
  1. d = {
  2.     'name_a' :'Gumby', 'age1':42,
  3.     'name_b' :'bob', 'age2':12,
  4.     'name_c':'lily', 'age3':14}
  5. num = len(d) # 返回字典的键值对数量
  6. print('num=' + str(num))
  7. > num=6
  8. str1 = d['name_a'] # 参数为键 返回值为对应的值
  9. print('name_a=' + str1)
  10. > name_a=Gumby
  11. d['name_a'] = 'tom' # 将tom赋值给name1键
  12. print('name_a=' + d['name_a'])
  13. > name_a=tom
  14. test = 'name_c' in d # 检查name3键是否在字典中
  15. print(test)
  16. > True
复制代码
1.4 与format相结合

将字符串格式设置功能用于字典
使用format_map将两者结合起来
  1. phonebook = {'bob' : 1211, 'tom': 2322}
  2. str1 = "I am bob. My phone is {bob}".format_map(phonebook)
  3. print(str1)
  4. > I am bob. My phone is 1211
复制代码
1.5 字典常用方法

1.5.1 clear删除所有字典项

就地执行,无返回值
  1. d = {
  2.     'name_a':'Gumby', 'age1':42,
  3.     'name_b':'bob', 'age2':12,
  4.     'name_c':'lily', 'age3':14}
  5. d.clear()
  6. print(d)
  7. > {}
复制代码
python中的变量赋值,是将变量名指向该地址,对该变量名的字典操作,实际上是对该地址存储的字典进行操作,如:
  1. d = {
  2.     'name_a' :'Gumby', 'age1':42,
  3.     'name_b' :'bob', 'age2':12,
  4.     'name_c':'lily', 'age3':14}
  5. x = d
  6. x.clear()
  7. print(x)
  8. print(d)
  9. > {}
  10. > {}   # 发现两个字典均被清空
复制代码
若将x再次赋其他值,对原来的字典没有影响
  1. d = {
  2.     'name_a' :'Gumby', 'age1':42,
  3.     'name_b' :'bob', 'age2':12,
  4.     'name_c':'lily', 'age3':14}
  5. x = {}
  6. x.clear()
  7. print(d)
  8. print(x)
  9. >
  10. {'name_a': 'Gumby', 'age1': 42, 'name_b': 'bob', 'age2': 12, 'name_c': 'lily', 'age3': 14}
  11. {}
复制代码
1.5.2 copy浅复制与深复制

浅复制

返回一个新字典,与原来的字典完全相同(浅复制)
  1. d = {
  2.     'name_a' :'Gumby', 'age1':42,
  3.     'name_b' :'bob', 'age2':12}
  4. x = d.copy()
  5. print(d)
  6. print(x)
  7. >
  8. {'name_a': 'Gumby', 'age1': 42, 'name_b': 'bob', 'age2': 12}
  9. {'name_a': 'Gumby', 'age1': 42, 'name_b': 'bob', 'age2': 12}
复制代码
浅复制要分两种情况进行讨论:
1)当浅复制的值是不可变对象(字符串、元组、数值类型)时和“赋值”的情况一样,对象的id值(id()函数用于获取对象的内存地址)与浅复制原来的值相同。
2)当浅复制的值是可变对象(列表、字典、集合)时会产生一个“不是那么独立的对象”存在。有两种情况:

  • 第一种情况:复制的对象中无复杂子对象,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。
  • 第二种情况:复制的对象中有复杂子对象(例如列表中的一个子元素是一个列表),如果不改变其中复杂子对象,浅复制的值改变并不会影响原来的值。 但是改变原来的值中的复杂子对象的值会影响浅复制的值。
参考:Python中的赋值(复制)、浅拷贝与深拷贝 - 知乎 (zhihu.com)
深复制

模块copy中的deepcopy 可以同时复制值以及包含的所有值
  1. from copy import deepcopy
  2. d = {
  3.     'name_a' :'Gumby', 'age1':42,
  4.     'name_b' :'bob', 'age2':12}
  5. x = deepcopy(d) # 深
  6. y = d.copy() # 浅
  7. x.clear()
  8. print(d)
  9. print(y)
复制代码
1.5.3 fromkeys 按条件创建字典

创建一个新字典,其中包含指定的键,且每个键对应的值都是None
  1. d = dict.fromkeys(['name','age'])
  2. print(d)
  3. > {'name': None, 'age': None}
复制代码
若不想使用默认值None 可以提供特定的值
  1. d = dict.fromkeys(['name','age'], 'default')
  2. print(d)
  3. > {'name': 'default', 'age': 'default'}
复制代码
1.5.4 get 通过键获取值

原来的直接通过键获取对应的值时,可能因为字典中没有该键而报错。
  1. d = dict.fromkeys(['name','age'], 'default')
  2. print(d['weight'])
  3. >
  4.     print(d['weight'])
  5.           ~^^^^^^^^^^
  6. KeyError: 'weight'
复制代码
而get方法下,寻找不存在的键值时,会返回None(可指定),不会报错
  1. d = dict.fromkeys(['name','age'], 'default')
  2. print(d.get('weight'))
  3. > None
复制代码
指定失败返回值为 N/A (可用于返回错误信息)
  1. d = dict.fromkeys(['name','age'], 'default')
  2. print(d.get('name', 'N/A'))
  3. > N/A
复制代码
查找成功,正常返回对应值
  1. d = dict.fromkeys(['name','age'], 'default')
  2. print(d.get('name', 'N/A'))
  3. > default
复制代码
1.5.5 items 将字典变成列表输出

返回一个包含所有字典项的列表,其中每个元素都为(key, value)的形式,顺序不固定
  1. d = {
  2.     'name_a' :'Gumby', 'age1':42,
  3.     'name_b' :'bob', 'age2':12}
  4. li = d.items()
  5. print(li)
  6. > dict_items([('name_a', 'Gumby'), ('age1', 42), ('name_b', 'bob'), ('age2', 12)])
复制代码
返回值属于字典视图的特殊类型,特点是不复制,始终是原字典的反映,随原字典改变而改变
  1. d['name_a'] = 'tom' # 修改原字典
  2. print(li)
  3. >
  4. dict_items([('name_a', 'tom'), ('age1', 42), ('name_b', 'bob'), ('age2', 12)])
复制代码
1.5.6 keys 返回字典的键

返回值为字典视图
  1. d = {
  2.     'name_a' :'Gumby', 'age1':42,
  3.     'name_b' :'bob', 'age2':12}
  4. li = d.keys()
  5. print(li)
  6. > dict_keys(['name_a', 'age1', 'name_b', 'age2'])
复制代码
1.5.7 pop获取键对应的值,并删除键值
  1. d = {'name_a' :'Gumby', 'age1':42}
  2. li = d.pop('name_a')
  3. print(li)
  4. print(d)
  5. >
  6. Gumby
  7. {'age1': 42}
复制代码
1.5.8 popitem “弹出”一组键值对

随机返回一组键值对,并从字典中删去该键值对,与列表中的pop方法类似,只是字典没有最后一位的概念
  1. d = {'name_a' :'Gumby', 'age1':42}
  2. print(d.popitem())
  3. print(d.popitem())
  4. print(d)
  5. >
  6. ('age1', 42)
  7. ('name_a', 'Gumby')
  8. {}
复制代码
  1. d = {'name_a' :'Gumby', 'age1':42}
  2. d_len = len(d.items())
  3. print(d_len)
  4. i = 0
  5. while(i < d_len):
  6.     print(d.popitem())
  7.     i = i + 1
  8. >
  9. 2
  10. ('age1', 42)
  11. ('name_a', 'Gumby')
复制代码
1.5.9 setdefault 获取指定键值 无则添加

有点像get 但对于找不到指定的键时,会添加指定的键值
  1. d = {}
  2. print(d.setdefault('name', 'None'))
  3. print(d)
  4. >
  5. None
  6. {'name': 'None'}
复制代码
1.5.10 update 使用A字典的项更新B字典
  1. d1 = {'name': 'bob', 'age': 12}
  2. d2 = {'name': 'tom'}
  3. d1.update(d2)
  4. print(d1)
  5. > {'name': 'tom', 'age': 12}
复制代码
1.5.11 values 返回字典的值

不同于键的唯一性,values的返回值可能有相同值
  1. d1 = {'name': 'bob', 'age': 60, 'weight': 60}
  2. print(d1.values())
  3. > dict_values(['bob', 60, 60])
复制代码
返回类型同样为字典视图

来源:https://www.cnblogs.com/lmc7/p/17537975.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具