写点什么

挑战 30 天学完 Python:Day8 数据类型 - 字典 dict

作者:MegaQi
  • 2023-04-17
    上海
  • 本文字数:3181 字

    阅读完需:约 10 分钟

📘 Day 8

🎉 本系列为 Python 基础学习,原稿来源于英文项目,大奇主要是对其本地化翻译、逐条验证和补充。此系列适合零基础同学,或仅了解 Python 一点知识,但又没有系统学习的使用者。总之如果你想提升自己的 Python 技能,欢迎加入《挑战 30 天学完 Python》

作者:大奇 MegaQi | Info 签约作者 ,专注测试开发技术实战干货分享,欢迎访问主页长期关注。

Dict 字典

字典是无序、可修改可变、成对(key:value)的数据类型集合。

创建字典

要创建一个 dict 类型,我们通过大括号{}或 内置函数方法 dict() 实现。


# 语法形式:空值empty_dict = {}
# 语法形式:带初始值(键值对)dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}
复制代码


实践例子


person = {    'name':'MegaQi',    'age':100,    'country':'China',    'is_marred':True,    'skills':['JavaScript', 'React', 'Node', 'Java', 'Python'],    'address':{        'city':'上海',         'street':'万航渡路'    }}
复制代码


上面的例子中对应的值可以是任何数据类型,如:字符串、布尔值、列表、元组、集合或字典。

字典长度

使用len(dict)可以获得字典的长度,它计算的是一对 'key: value' 的数量。


# syntaxdct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}print(len(dct)) # 4
复制代码


具体例子


person = {    'name':'MegaQi',    'age':100,    'country':'China',    'is_marred':True,    'skills':['JavaScript', 'React', 'Node', 'Java', 'Python'],    'address':{        'city':'上海',         'street':'万航渡路'    }}print(len(person)) # 6
复制代码

字典访问

我们通过引用 key 的的方式获取 dict 键值对的值。形式为字典变量[key]


# 语法dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}print(dct['key1']) # value1print(dct['key4']) # value4
复制代码


详细例子


person = {    'name':'MegaQi',    'age':100,    'country':'China',    'is_marred':True,    'skills':['JavaScript', 'React', 'Node', 'Java', 'Python'],    'address':{        'city':'上海',         'street':'万航渡路'    }}print(person['name'])       # MegaQiprint(person['country'])    # Chinaprint(person['skills'])     # ['JavaScript', 'React', 'Node', 'Java', 'Python']print(person['skills'][0])  # JavaScriptprint(person['address']['street']) # 万航渡路print(person['school'])       # KeyError: school
复制代码


如果访问 key 不存在则会引发错误。为了避免这种错误,首先必须检查键是否存在,或者可以使用get方法。如果键不存在,get 方法会返回 None,表示是一个 NoneType 对象数据类型。


# 将上边的例子改成用get获取值person = {    #...略...}print(person.get('name')) print(person.get('country')) print(person.get('skills'))print(person.get('city'))   # None
复制代码

字典增改

增加 dict 项

通过引用赋值,可以向已存在的字典中增加新的 key-value 项。


# 语法dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}dct['key5'] = 'value5'
复制代码


例子


person = {    # ...同上...}person['job_title'] = 'testcoder'person['skills'].append('sql')print(person)
复制代码

修改 dict 项值

同样的我们可以通过引用重新赋值一个项 key 对应值。


# 语法dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}dct['key1'] = 'value-one'
复制代码


尝试例子


person = {    # ...同上...}person['city'] = 'Beijing'person['age'] = 150print(person)
复制代码

检查\复制\转换

字典检查

要检查一个字典对是否存在,通过操作符in判断 key 是否在 dict 中包含。


# 语法dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}print('key2' in dct) # Trueprint('key5' in dct) # False
# 例子person = { # ...同上...}print('city' in person) # Trueprint('school' in person) # Flase
复制代码

字典拷贝

使用copy()方法复制字典。使用复制可以避免原字典的项在操作中变动。


# 语法dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}dct_copy = dct.copy() # {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}
# 例子person = { # ...同上...}copy_person = person.copy()copy_person['city'] = '深圳'print(person)print(copy_person)
复制代码

字典转列表

方法items()将 dictionary 转换为元组列表。


# 语法dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}print(dct.items()) # dict_items([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3'), ('key4', 'value4')])
复制代码

移删清空

字典项移除

移除字典中的项,可以通过以下三个方法:


  • pop(key) :移除具有指定键名的项,并返回移除项值

  • popitem():删除最后一项,并返回项值

  • del:移除项通过关键名字


# 语法dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}dct.pop('key1') # 移除key1项dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}dct.popitem() # 移除最后一项del dct['key2'] # 移除第二项
复制代码


例子


person = {    'name':'MegaQi',    'age':100,    'country':'China',    'is_marred':True,    'skills':['JavaScript', 'React', 'Node', 'Java', 'Python'],    'address':{        'city':'上海',         'street':'万航渡路'    }}person.pop('name')         # 移除名字 name 第一项person.popitem()           # 移除最后 address 项del person['age']          # 移除 age 项
复制代码

清空字典项

如果不需要字典中的项,可以使用clear()方法清除它们。


# 语法dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}print(dct.clear()) # None
# 实际例子person = { # ...同上...}person.clear()print(person) # {}
复制代码

删除整个字典

如果我们不使用字典,我们可以完全删除它。


# 语法dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}del dct
# 实际例子person = { # ...同上...}del personprint(person) # NameError: name 'person' is not defined
复制代码

获取键或值列表

方法keys()可以获取字典中的所有键 list。


# 语法dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}keys = dct.keys()print(keys)     # dict_keys(['key1', 'key2', 'key3', 'key4'])
复制代码


方法values()可以获取字典中的所有值 list。


# 语法dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}values = dct.values()print(values)     # dict_values(['value1', 'value2', 'value3', 'value4'])
复制代码


🌕 你真非常厉害,你已经了解关于字典 dict 相关支持。你已经完成了第 8 天的挑战,现在让我们做一些练习巩固下吧。

💻第 8 天练习

  1. 创建一个空的字典 dict 名字可以叫 dog

  2. 添加 name, color, breed, legs, age 到 dog 字典

  3. 创建一个 student 字典,并向其中添姓名 name,年龄 age,技能 skills,国家 country,城市 city 和 地址项

  4. 获取 student 字典的长度并打印

  5. 获取项 skills 的值,并检查它的数据类型

  6. 向 skills 中再添加 1 或两个技能

  7. 获取一个字典的所有 keys

  8. 获取一个字典的所有 values

  9. 使用 items()方法将一个字典转成元组列表

  10. 选择一个字典移除一项

  11. 完整的删除掉一个字典 dog 或 student


🎉 CONGRATULATIONS ! 🎉


github 项目(含参考答案)地址:https://github.com/QiCodeCN/30-Days-Of-Python-zh_CN

如喜欢通过“点赞👍收藏❤️关注➕”鼓励作者大奇

文章中如有错误或疑问欢迎指正和交流。

发布于: 刚刚阅读数: 6
用户头像

MegaQi

关注

InfoQ签约作者 |公众号: 非典型性程序员 2018-02-15 加入

分享一些系列测试平台开发教程,也记录一些自己研究的技术,遇到的问题,总之想分享一些干货内容,愿给这个行业贡献微不足道的力量,不断突破不断成长。

评论

发布
暂无评论
挑战 30 天学完 Python:Day8 数据类型 - 字典 dict_Python_MegaQi_InfoQ写作社区