Python字典


1. 简介

  • \color{grey}{列表存储数据的问题:}

结构化数据是指有明确属性,明确表示规则的数据
列表在表达结构化数据时语义不明确

  • \color{red}{字典与列表的区别:}

列表有序存储数据,按索引值进行提取
字典采用键值方式存储数据,数据无序存储

  • \color{green}{字典的特点:}
  • 字典采用键(key):值(value)形式表达数据
  • 字典中key不允许重复value允许重复
  • 字典是可修改的,运行时动态调整存储空间
  • \color{yellow}{散列值与字典的存储原理:}

字典也被称为哈希(hash),对应散列值
散列值是从任何一种数据中创建数字指纹
Python中提供了hash()函数生成散列值


2. 创建字典

  • \color{green}{直接创建:}

使用{}
用法:字典名 = {'key': value, 'key': value...}

字典的key与value之间用冒号: 分隔,键值对之间用逗号,分隔,key 约定俗成建议最好使用英文

  • \color{blue}{示例:}
# 创建空字典
>>> dict1 = {}
>>> print(dict1)
{}

# 创建一个个人信息字典
>>> dict2 = {'name': '张三', 'sex': '男',
     'hiredate': '1994-10-14', 'grade': 'A',
     'job': '销售', 'salary': 1000,
     'welfare': 100
     }
>>> print(dict2)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'salary': 1000, 'welfare': 100}
  • \color{green}{使用函数创建:}

函数:dict()
用法:dict(key=value, key=value...)

使用函数 dict() 创建字典时,key不能使用引号引起来,否则会报错

  • \color{green}{给键设置默认值:}

函数:dict.fromkeys()
用法:dict.fromkeys([key列表], '默认值')

fromkeys 必须配合 dict函数 使用,将给定列表中的每个元素作为 key,默认值为 value ,默认值不设置则为 None

  • \color{blue}{dict()创建字典示例:}
# 利用函数dict()创建字典
>>> dict3 = dict(name='张三',sex='男',hiredate='1994-10-14',grade='A',job='销售',salary=1000,welfare=100)
>>> print(dict3)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'salary': 1000, 'welfare': 100}
  • \color{blue}{设置默认值示例:}
# 不设置默认值则所有键的值为None
>>> dict4 = dict.fromkeys(['name', 'sex', 'hiredate', 'grade', 'job', 'salary', 'welfare'])
>>> print(dict4)
{'name': None, 'sex': None, 'hiredate': None, 'grade': None, 'job': None, 'salary': None, 'welfare': None}

# 给键设置了默认值N/A
>>> dict4 = dict.fromkeys(['name', 'sex', 'hiredate', 'grade', 'job', 'salary', 'welfare'], 'N/A')
>>> print(dict4)
{'name': 'N/A', 'sex': 'N/A', 'hiredate': 'N/A', 'grade': 'N/A', 'job': 'N/A', 'salary': 'N/A', 'welfare': 'N/A'}

3. 字典的访问


3.1 字典的取值操作

  • \color{green}{方法1:}

字典名['key']

跟列表取单值方法类似,当获取的key不存在时会报错

  • \color{green}{方法2:}

函数:get()
用法:字典名.get('key')

当获取的 key 不存在时,不报错,返回 None
可以用 get('key', '值') 给键设置默认值,当键存在时返回其值,不存在时返回设置的默认值

  • \color{blue}{示例:}
# 定义一个字典
>>> employee = {'name': '张三', 'sex': '男',
     'hiredate': '1994-10-14', 'grade': 'A',
     'job': '销售', 'salary': 1000,
     'welfare': 100
     }
# 取值
>>> print(employee['name'])
张三
# 函数get()取值
>>> print(employee.get('name'))
张三

# 取不存在key值(报错)
>>> print(employee['age'])
Traceback (most recent call last):
  File "<pyshell#31>", line 1, in <module>
    print(employee['age'])
KeyError: 'age'
# get()取不存在的key值
>>> print(employee.get('age'))
None

# 用get设置不存在键的默认值
print(employee.get('age', 26))
26

3.2 给字典设置默认值

  • \color{green}{方法:}

函数:setdefault()
用法:字典名.setdefault('key', 默认值)

为指定key设置默认值,如果key已存在则忽略,不存在则设置,默认值不设置则为 None

  • \color{blue}{示例:}
>>> emp1 = {'name': 'jacky', 'grade': 'B'}
>>> emp2 = {'name': 'lily', 'grade': 'A'}

#当key存在时
>>> emp1.setdefault('grade', 'C')
'B'
>>> print(emp1)
{'name': 'jacky', 'grade': 'B'}

#当key不存在时
>>> emp2.setdefault('sex', '男')
'男'
>>> print(emp2)
{'name': 'lily', 'grade': 'A', 'sex': '男'}
  • \color{red}{get与setdefault区别:}
  • get() 是获取字典 key的值 ,key存在时返回其值,不存在则返回设置的 默认值不会改变字典原有数据
  • setdefault() 是设置字典 key的值 ,key存在忽略,不存在则新增并设置 默认值当key不存在时会改变字典数据

3.3 格式化输出字典

  • \color{green}{方法:}

函数:format_map()
用法:"{key}, {key}".format_map(字典名)

老版本的字符串格式化:%(key)s, %(key)s" %字典名

  • \color{blue}{示例:}
>>> emp = {'name': 'jacky', 'grade': 'B', 'hiredate': '2020-05-30'}

# 老版本格式化字符串
>>> emp_old_str = "姓名:%(name)s, 评级:%(grade)s, 入职时间:%(hiredate)s" %emp
>>> print(emp_old_str)
姓名:jacky, 评级:B, 入职时间:2020-05-30

# 新版本格式化字符串
>>> emp_new_str = "姓名:{name}, 评级:{grade}, 入职时间:{hiredate}".format_map(emp)
>>> print(emp_new_str)
姓名:jacky, 评级:B, 入职时间:2020-05-30

3.4 判断key存在与否

  • \color{green}{成员运算符:}

'key' in 字典名
'key' not in 字典名

in 存在返回 True,不存在返回 False
not in 则相反


3.5 遍历字典


3.5.1 遍历key

  • \color{green}{方法1:}

for k in 字典名:
键:k
值:字典名[k]

  • \color{blue}{示例:}
>>> employee = {'name': '张三', 'sex': '男',
     'hiredate': '1994-10-14', 'grade': 'A',
     'job': '销售', 'salary': 1000,
     'welfare': 100
     }
>>> for k in employee:
    print("键: {}".format(k))      #取键
    print("值: {}".format(employee[k]))      #取值

键: name
值: 张三
  -- snip --
  • \color{green}{方法2(函数):}

for k in 字典名.keys():
键:k
值:字典名[k]

函数 keys() 用于获取字典的所有键
用法:字典名.keys()
使用 type() 打印类型会发现是一个特殊的 dict_keys 类型

  • \color{blue}{示例:}
# 效果与示例1相同
>>> employee = {'name': '张三', 'sex': '男',
     'hiredate': '1994-10-14', 'grade': 'A',
     'job': '销售', 'salary': 1000,
     'welfare': 100
     }
>>> for k in employee.keys():
    print("键: {}".format(k))
    print("值: {}".format(employee[k]))

键: name
值: 张三
  -- snip --
# 一个特殊的dict_keys类型
>>> employee.keys()
dict_keys(['name', 'sex', 'hiredate', 'grade', 'job', 'salary', 'welfare'])
>>> type(employee.keys())
<class 'dict_keys'>

3.5.2 遍历value

  • \color{green}{方法:}

for v in 字典名.value():
值:v

函数 values() 用于获取字典的所有值
用法:字典名.values()
使用 type() 打印类型会发现是一个特殊的 dict_values 类型

  • \color{blue}{示例:}
>>> employee = {'name': '张三', 'sex': '男',
     'hiredate': '1994-10-14', 'grade': 'A',
     'job': '销售', 'salary': 1000,
     'welfare': 100
     }
>>> for v in employee.values():
    print(v)
    
张三
男
  -- snip --
# 一个特殊的dict_values类型
>>> employee.values()
dict_values(['张三', '男', '1994-10-14', 'A', '销售', 1000, 100])
>>> type(employee.values())
<class 'dict_values'>

3.5.3 遍历键值对

  • \color{green}{方法:}

for k,v in 字典名.items():
键:k
值:v

函数 items() 用于获取字典的所有键值对
用法:字典名.items()
使用 type() 打印类型会发现是一个特殊的 dict_items 类型

  • \color{blue}{示例:}
>>> employee = {'name': '张三', 'sex': '男',
     'hiredate': '1994-10-14', 'grade': 'A',
     'job': '销售', 'salary': 1000,
     'welfare': 100
     }
>>> for k,v in employee.items():
    print("键: {}".format(k))
    print("值: {}".format(v))

键: name
值: 张三
  -- snip --
# 一个特殊的dict_items类型
>>> employee.items()
dict_items([('name', '张三'), ('sex', '男'), ('hiredate', '1994-10-14'), ('grade', 'A'), ('job', '销售'), ('salary', 1000), ('welfare', 100)])
>>> type(employee.items())
<class 'dict_items'>
  • \color{red}{总结:}

dict_ 开头的类型,被称为字典的 视图对象,视图对象会随着字典的内容随时发生变化



4. 字典的更新、增加与删除


4.1 更新

  • \color{green}{更新单个值:}

字典名['key'] = 新值

字典单个值更新的方法与列表相同

  • \color{green}{更新多个值:}

函数:update()
用法:字典名.update(键=值, 键=值...)

使用 update() 更新字典值时,() 内的 不要加引号,否则会报错

  • \color{blue}{示例:}
>>> employee = {'name': '张三', 'sex': '男',
     'hiredate': '1994-10-14', 'grade': 'A',
     'job': '销售', 'salary': 1000,
     'welfare': 100
     }

#更新单值
>>> employee['grade'] = 'B'
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'B', 'job': '销售', 'salary': 1000, 'welfare': 100}

# 更新多值
>>> employee.update(salary=1200, welfare=150)
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'B', 'job': '销售', 'salary': 1200, 'welfare': 150}

4.2 增加

字典的新增与更新操作完全相同,秉承有则更新,无则新增的原则(更新的值不存在就增加)

  • \color{blue}{示例:}
>>> employee = {'name': '张三', 'sex': '男',
     'hiredate': '1994-10-14', 'grade': 'A',
     'job': '销售', 'salary': 1000,
     'welfare': 100
     }

#无则新增
>>> employee['dept'] = '研发部'
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'salary': 1000, 'welfare': 100, 'dept': '研发部'}

#有则更新
>>> employee['dept'] = '市场部'
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'salary': 1000, 'welfare': 100, 'dept': '市场部'}

#新增多值时同理
>>> employee.update(weight=80, dept='财务部')
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'salary': 1000, 'welfare': 100, 'dept': '财务部', 'weight': 80}

4.3 删除

  • \color{green}{删除指定key:}

del语句
用法:del 字典名['key']

  • \color{blue}{del语句示例:}
>>> employee = {'name': '张三', 'sex': '男',
     'hiredate': '1994-10-14', 'grade': 'A',
     'job': '销售', 'salary': 1000,
     'welfare': 100
     }
>>> del employee['salary']
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'welfare': 100}

函数:pop()
用法:字典名.pop('key')

  • \color{blue}{pop函数示例:}
>>> employee = {'name': '张三', 'sex': '男',
     'hiredate': '1994-10-14', 'grade': 'A',
     'job': '销售', 'salary': 1000,
     'welfare': 100
     }
>>> employee.pop('hiredate')
'1994-10-14'
>>> print(employee)
{'name': '张三', 'sex': '男', 'grade': 'A', 'job': '销售', 'salary': 1000, 'welfare': 100}
  • \color{green}{删除最后一个key:}

函数:popitem()
用法:字典名.popitem()

  • \color{blue}{示例:}
>>> employee = {'name': '张三', 'sex': '男',
     'hiredate': '1994-10-14', 'grade': 'A',
     'job': '销售', 'salary': 1000,
     'welfare': 100
     }
>>> employee.popitem()
('welfare', 100)
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'salary': 1000}
  • \color{green}{清空字典:}

函数:clear()
用法:字典名.clear()

字典名 = {} 也可以清空字典,清空后返回一个空字典

  • \color{blue}{示例:}
# clear()函数
>>> employee = {'name': '张三', 'sex': '男',
     'hiredate': '1994-10-14', 'grade': 'A',
     'job': '销售', 'salary': 1000,
     'welfare': 100
     }
>>> 
>>> employee.clear()
>>> print(employee)
{}

#效果相同
>>> employee = {}
>>> print(employee)
{}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。