Python快速上手系列--字典--详解实战篇

简介: Python快速上手系列--字典--详解实战篇

本章字典篇,比较的重要,所以有比较多的练习小实战,一起来看看吧。

字典

什么是字典:

字典:是一系列的键值对,每一个键都会有对应的一个值关联,它们可以是数字 ,字符串,列表以及字典本身。用{}来表示。

特点:

1. 查找和插入的速度极快,不会随着key的增加而增加;

2. 需要占用大量的内存,内存浪费多。

# 创建一个字典
airship = {'color':'yellow','year':'100','qingan':'清安'}

这个就是字典,'color'、'year'、'qingan'就是键,'yellow'、100、清安就是值,我们创建的这个飞船字典,还可以对它进行访问哦!

airship = {'color': 'yellow', 'year': '100', 'qingan': '清安'}
print(airship['qingan']+"的飞船颜色是"+airship['color'] +"今年"+ airship['year']+"岁了")

注意:我们可以通过访问飞船的键来获取它的值。

get方法

另外介绍一种获取值得方法.get()

# 创建一个字典
airship = {'color':'yellow','year':'100','qingan':'清安'}
i = airship.get('color')
print(i)
print(a.get('yearr','不存在这个键'))
# yellow
# 不存在这个键

小实战

l1 = {'name': '清安', 'age': 18, 'sex': '男'}
l2 = {'name':'菜狗','age':20,'sex':'女'}
l3 = {'name':'菜鸡','age':22,'sex':'男'}
list_ = [l1,l2,l3]
for i in range(len(list_)):
    print(list_[i].get('name'))
# 清安
# 菜狗
# 菜鸡

此处结合了前面所学的列表知识,一并做了一个练习。将字典嵌入到列表中,用上for循环来循环list_列表的长度,也就是len函数。用列表索引取值的方式获取到i,i来对len的长度进行循环,list_中有三个变量,所以长度为3,索引从0开始,再用get获取到指定的键,并进行值的打印。

zip函数创建字典

zip函数前面列表处介绍过的,此处再来运用一番:

a = ['name','age','sex']
b = ['清安',18,'男']
c = dict(zip(a,b))
print(c)
# {'name': '清安', 'age': 18, 'sex': '男'}

可以说是一一对应的生成了字典。

fromkeys函数

d = dict.fromkeys(['name','age','sex'])
print(d)
# {'name': None, 'age': None, 'sex': None}

注意了,None是一个值!!!

添加键值对

# 创建一个字典
airship = {'color': 'yellow', 'year': '100', 'qingan': '清安'}
airship['money'] = 100000
airship['driving_speed'] = 2000
print(airship)

这里我们添加了两个新的键与值。键为'money'、'driving_speed',值为10000,2000,中间用=号连接起来。添加键值对的格式就是这样的。

小伙伴们也可以先创建一个空字典,再进行添加键值对哦,格式:airship = {},就是花括号里面什么也不写 ,就是空字典了。

删除键值对

airship = {'color': 'yellow', 'year': '100', 'qingan': '清安'}
del airship['year']
print(airship)

我们也是使用del来进行删除,关于这个方法,清安在前面讲过哦,忘记了的赶紧去复习一下。

另外pop也是可以的pop(key)也是可以删除的哦。

修改键值对

airship = {'color': 'yellow', 'year': '100', 'qingan': '清安'}
airship['color'] = 'red'
print(airship)

修改字典中的值,我们直接指定键就可以了,像小北这样,指定color你可以将颜色改成任何一种颜色哦。

弹出

airship = {'color': 'yellow', 'year': '100', 'qingan': '清安'}
# 指定弹出键所对应的值
a = airship.pop('color')
print(a)
# yellow

还有一种方法是popitem

airship = {'color': 'yellow', 'year': '100', 'qingan': '清安'}
a = airship.popitem()
print(a,airship)
airship.popitem()
print(airship)
# ('qingan', '清安') 
# {'color': 'yellow', 'year': '100'}

这里你需要注意的是如果你使用了方法popitem后,你用变量接收了它,那么打印出来的只会是元组。如果直接打印airship,就可以看出弹出的是字典中最后那一个键值对。

实战综合运用

当你想写很多的键值对到字典中时,你可以:

language = {
    'tom' : 'python',
    'tim' : 'java',
    'zhangsan' : 'c',
    'lisi' : 'php',
    'wangwu' : 'html',
}
print(language)

实战一

当你想输出王五喜欢的课程,并且首字母要求大写时,你可以:

language = {
    'tom' : 'python',
    'tim' : 'java',
    'zhangsan' : 'c',
    'lisi' : 'php',
    'wangwu' : 'html',
}
favorite = language['wangwu'].title()
print(favorite)
# Html

for循环

我们接下来结合前面两章所学,运用到字典上来,看例子:

language = {
    'tom' : 'python',
    'tim' : 'java',
    'zhangsan' : 'c',
    'lisi' : 'php',
    'wangwu' : 'html',
}
for key,values in language.items():
    print(f"KEY:{key}   VALUES:{values}")
# KEY:tom   VALUES:python
# KEY:tim   VALUES:java
# KEY:zhangsan   VALUES:c
# KEY:lisi   VALUES:php
# KEY:wangwu   VALUES:html

这里我们用到了for循环,这里的意思是循环打印出language的键与值,我们自己定义的key和values一个代表键一个代表值,这两个小伙伴们想怎么定义就这么定义,但是定义变量的注意事项要记得哦,key是键,values是值,程序上的.items(),这是 一个方法,它会返回一个键值对列表,如果不加就会报错哦。

遍历key值

language = {
    'tom' : 'python',
    'tim' : 'java',
    'zhangsan' : 'c',
    'lisi' : 'php',
    'wangwu' : 'html',
}
for key in language.keys():
    print(f"KEY:{key}")

遍历key值为什么用的是keys?key值是一种说法,字典是键与值一起的组合,所以这里取名为key值。keys是方法,用来取值的。

实战2

language = {
    'tom': 'python',
    'tim': 'java',
    'zhangsan': 'c',
    'lisi': 'php',
    'wangwu': 'html',
}
friend = ['lisi', 'liehuang', 'wangwu']
# 用变量循环language字典中的键
for key in language.keys():
    print(key.title())
    # 判断key是否再friend列表中
    if key in friend:
        # 定义一个变量来接收存在的键
        friends = language[key].title()
        print(f"{key.title()}, I love {friends}")

遍历所有的值

language = {
    'tom': 'python',
    'tim': 'java',
    'zhangsan': 'c',
    'lisi': 'php',
    'wangwu': 'php',
}
for value in language.values():
    print(value)

注意了,这里输出的结果是有重复的哦。怎么样去重呢?看下面

去重

那么我们要去重又要输出值怎么办呢?我们可以用set方法

language = {
    'tom': 'python',
    'tim': 'java',
    'zhangsan': 'c',
    'lisi': 'php',
    'wangwu': 'php',
}
for value in set(language.values()):
    print(value)

列表字典

dictt = {'color': 'red', 'year': 1}
dictt1 = {'color': 'yellow', 'year': 2}
dictt2 = {'color': 'blue', 'year': 3}
all_dictt = [dictt, dictt1, dictt2]
print(all_dictt)
for all_dictts in all_dictt:
    print(all_dictts)
# [{'color': 'red', 'year': 1}, {'color': 'yellow', 'year': 2}, {'color': 'blue', 'year': 3}]
# {'color': 'red', 'year': 1}
# {'color': 'yellow', 'year': 2}
# {'color': 'blue', 'year': 3}

我们创建三个字典,再将字典放进一个列表中,再进行循环打印,并输出,也许小伙伴会觉得复杂,此处我们还是得学习的,后面的selenium以及appium亦或者接口自动化需要用到读取表格哦传输值哦。

实战三

我们将上述dictt字典放入一个空的列表,并让这个字典连续打印十次

lists = []
# 循环十次
for list_2 in range(1, 11):
    dictt = {'color': 'red', 'year': 1}
    # 将字典添加到列表中
    lists.append(dictt)
# 定义一个变量循环遍历列表
for list_3 in lists:
    print(list_3)
print(f"一共创建了:{list_2}个字典")

结果行数太多了就不写出来了,可以自己试试效果如何。

也可以对其进行一定的修改,比如修改前三个的颜色:

lists = []
# 循环十次
for list_2 in range(1, 11):
    dictt = {'color': 'red', 'year': 1}
    # 将字典添加到列表中
    lists.append(dictt)
# 使用一个新的循环去循环列表的前三个字典
for lists_1 in lists[:3]:
    # 如果color等于red,则将color进行更改,year也可以进行更改
    if lists_1['color'] == 'red':
        lists_1['color'] = 'green'
        lists_1['year'] = 2
# 定义一个变量循环遍历列表,显示前四个
for list_3 in lists[:4]:
    print(list_3)
print(f"一共创建了:{list_2}个字典")

如果你觉得为什么判定red不判定year就可以更改,因为他们再同一个字典中,不放心的小伙伴可以用if对year多进行一次判断哦。

**        字典中可以储存列表,看下面的操作你就明白了:**

pak = {
    'dog': 'yellow',
    'birds': ['red', 'blue'],
}
print(f"动物园里有:{pak['dog']}颜色的狗")
for paks in pak['birds']:
    print("鸟的颜色有:\t" + paks + "的")

这里我们在字典中加入了列表,'birds'的值为一个列表,我们想要输出对应的值,就必须使用for循环才能一一输出,看示例,我们定义一个变量循环遍历pak字典中'birds'键所对应的值,并打印这个变量,就能得到我们想要的值了。

实战四

pak = {
    'dog': ['yellow', 'black'],
    'birds': ['red', 'blue'],
    'cat': ['white', 'orange'],
}
for animals,color in pak.items():
    print(f"{animals}颜色都有:")
    for color_num in color:
        print(color_num.title())
# dog颜色都有:Yellow Black
# birds颜色都有:Red Blue
# cat颜色都有:White Orange

这里我们使用了多个列表值,并用for循环进行遍历所有的颜色!你们输出的格式不是我注释的那个样子,这里我是修改了格式,所以不必纠结。

字典存储字典

number = {
    '张三': {
        'first_name': '张',
        'last_name': '三',
        'height': 180,
    },
    '李四': {
        'first_name': '李',
        'last_name': '四',
        'height': 170,
    },
}
for usename, usenames in number.items():
    print(f"{usenames['first_name']}{usenames['last_name']}{usenames['height']}")
#第二种写法
number = {
    '张三': {
        'first_name': '张',
        'last_name': '三',
        'height': 180,
    },
    '李四': {
        'first_name': '李',
        'last_name': '四',
        'height': 170,
    },
}
for usename, usenames in number.items():
    full_name = f"{usenames['first_name']}{usenames['last_name']}"
    location = usenames['height']
    print(f"{full_name}、身高:{location}")

这两种写法最后的结果都是一样的,写法上稍微有一点点不同,可能第一种小伙伴更容易理解。

第二种只是额外给了一个变量而已,而第一种方法直接调用了定义的变量指定内部字典纸进行输出。很多小伙伴肯定会问,外部字典键为什么不输出,要想输出,直接将usename加载print里面就好了,这里只是便于观看而已。

实战五

name_user = {}
# i = True
while True:  # while i
    # 提示输入名称
    name = input("请输入课程:")
    teacher = input("请输入老师名称:")
    # 写入字典
    name_user[name] = teacher
    last = input("还有吗?y/n\t")
    #进行输入判断,如果为no则结束循环
    if last == 'no':
        break
        # i = False
# 用循环输出键与值
for names, value in name_user.items():
    print(f"我得课程是{name},我的老师是{teacher}")

这里可以自动填入键值对,所以还是值得大家好好看看的。

目录
相关文章
|
16天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
60 6
|
16天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
103 45
|
8天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第36天】本文将带你走进Python的世界,从基础语法出发,逐步深入到实际项目应用。我们将一起探索Python的简洁与强大,通过实例学习如何运用Python解决问题。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供有价值的指导和灵感。让我们一起开启Python编程之旅,用代码书写想法,创造可能。
|
10天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
27 4
|
8天前
|
机器学习/深度学习 数据可视化 数据处理
Python数据科学:从基础到实战
Python数据科学:从基础到实战
17 1
|
9天前
|
机器学习/深度学习 JSON API
Python编程实战:构建一个简单的天气预报应用
Python编程实战:构建一个简单的天气预报应用
23 1
|
12天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
27 1
|
12天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
28 1
|
17天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
62 7
|
17天前
|
数据采集 Web App开发 前端开发
Python爬虫进阶:Selenium在动态网页抓取中的实战
【10月更文挑战第26天】动态网页抓取是网络爬虫的难点,因为数据通常通过JavaScript异步加载。Selenium通过模拟浏览器行为,可以加载和执行JavaScript,从而获取动态网页的完整内容。本文通过实战案例,介绍如何使用Selenium在Python中抓取动态网页。首先安装Selenium库和浏览器驱动,然后通过示例代码展示如何抓取英国国家美术馆的图片信息。
37 6