字典进阶操作 -- 循环和嵌套

字典的循环

我们先看直接打印字典的样子,会分别对每对key:value进行打印,并使用,分隔他们

dic = {
"赵四": "特别能歪嘴",
"刘能": "老, 老四啊...",
"大脚": "跟这个和那个搞对象",
"大脑袋": "瞎折腾....",
}
print(dic) #输出结果
{'赵四': '特别能歪嘴', '刘能': '老, 老四啊...', '大脚': '跟这个和那个搞对象', '大脑袋': '瞎折腾....'}

1. 可以用for循环, 直接拿到key

for key in dic:
print(key,dic[key]) #输出结果
赵四 特别能歪嘴
刘能 老, 老四啊...
大脚 跟这个和那个搞对象
大脑袋 瞎折腾....

这里key也不需要特殊指定,key就代表其中的赵四、刘能、大脚、大脑袋

同样,对应的value也能够通过dic[key]拿到结果.

2. 希望把所有的key全都保存在一个列表中

直接用字典命令dic.keys()拿到key的值

print(dic.keys())

#输出结果
dict_keys(['赵四', '刘能', '大脚', '大脑袋'])

进而可以直接把他们塞进列表中

print(list(dic.keys()))  # 列表拿到所有的key了

#输出结果
['赵四', '刘能', '大脚', '大脑袋']

3.希望把所有的value全都保存在一个列表中

直接用字典命令dic.valus()value都放在一个列表中

print(list(dic.values()))
#输出结果

4. 直接拿到字典中的keyvalue

这里先扩展讲"解构"(解包)

"解构"(解包)是Python中提取打包数据结构(如元组、列表、集合和字典)元素的一种方法。下面是如何对这四种数据结构进行解包:

  1. 元组(Tuple):

    tup = (1, 2, 3, 4)  # 创建一个元组
    a, b, c, d = tup # 解包元组
    print(a) # 输出:1
    print(b) # 输出:2
    print(c) # 输出:3
    print(d) # 输出:4
  2. 列表(List):

    lst = [1, 2, 3, 4]  # 创建一个列表
    a, b, c, d = lst # 解包列表
    print(a) # 输出:1
    print(b) # 输出:2
    print(c) # 输出:3
    print(d) # 输出:4
  3. 集合(Set):
    需要注意的是,集合是无序的,因此解包的结果可能不按照你预期的顺序给出(每次执行结果都不一样)。此外,集合元素不能是可变对象,如列表或字典。

    set_data = {'w', "x", "y", "z"}  # 创建一个集合
    a, b, c, d = set_data # 解包集合
    print(a) # 随机输出一个,取决于集合的内部实现
    print(b) # 同上
    print(c) # 同上
    print(d) # 同上 #执行结果
    y
    w
    x
    z
  4. 字典(Dictionary):

    解包字典的值

    dict_data = {'name': 'Alice', 'age': 30}  # 创建一个字典
    a, b = dict_data.values() # 解包字典的值
    print(a) # 输出:Alice
    print(b) # 输出:30

    或者解包字典的键:

    dict_data = {'name': 'Alice', 'age': 30}  # 创建一个字典
    key1, key2 = dict_data.keys() # 解包字典的键
    print(key1) # 输出:name
    print(key2) # 输出:age

说完"解构"(解包),我们在说一下这个dic.items()命令效果

dic = {
"赵四": "特别能歪嘴",
"刘能": "老, 老四啊...",
"大脚": "跟这个和那个搞对象",
"大脑袋": "瞎折腾....",
}
print(dic.items()) #确定,dic.items()中只有两项元素 #输出结果
dict_items([('赵四', '特别能歪嘴'), ('刘能', '老, 老四啊...'), ('大脚', '跟这个和那个搞对象'), ('大脑袋', '瞎折腾....')])

通过使用dic.items()再说结合for循环,通过解构原理,直接拿到key和value

for item in dic.items():
key,value = item
print(key,value) #输出结果
赵四 特别能歪嘴
刘能 老, 老四啊...
大脚 跟这个和那个搞对象
大脑袋 瞎折腾....

最终,我们拿到最简化的版本(*重点记住)

for k, v in dic.items():  # 可以直接拿到字典的所有的key和value
print(k, v)

字典的嵌套

wangfeng = {
"name": "汪峰",
"age": 18,
"wife": {
"name": "章子怡",
"hobby": "演戏",
"assistant": {
"name": "樵夫",
"age": 19,
"hobby": "打游戏"
}
},
"children": [
{"name": "孩儿1", "age": 13},
{"name": "孩儿2", "age": 10},
{"name": "孩儿3", "age": 8},
]
}

查询:汪峰妻子的助手的名字

name = wangfeng['wife']['assistant']['name']
print(name) #输出结果
樵夫

修改:给汪峰的第二个孩子加1岁

wangfeng['children'][1]['age'] = wangfeng['children'][1]['age'] + 1
print(wangfeng) #输出结果
{'name': '汪峰', 'age': 18, 'wife': {'name': '章子怡', 'hobby': '演戏', 'assistant': {'name': '樵夫', 'age': 19, 'hobby': '打游戏'}}, 'children': [{'name': '孩儿1', 'age': 13}, {'name': '孩儿2', 'age': 11}, {'name': '孩儿3', 'age': 8}]}

Python——第二章:字典的循环、嵌套、"解构"(解包)的更多相关文章

  1. 简学Python第二章__巧学数据结构文件操作

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  2. “全栈2019”Java第八十四章:接口中嵌套接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. “全栈2019”Java第六十七章:内部类、嵌套类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. 【python基础语法】多重循环嵌套,函数(第6天课堂笔记)

    1.什么是函数?函数有什么作用? 函数都是有特定功能的,都是由一些有特定功能的进行封装完成的 2.已经学过了哪些内置函数?分别有什么作用? print:输出 input:输入 type:查询数据类型 ...

  5. Python 第二章-列表和元组

    第二章-列表和元组 2.0      在Python中,最基本的数据结构是序列(sequence).序列中的每个元素被分配一个序列号-即元素的位置, 也称为索引.第一个索引是0,第二个是1,以此类推. ...

  6. python第二章:数据类型--小白博客

    标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dictionary(字典) Python3 ...

  7. python第二章:控制流

    变成实际上是一个过程的提现,每个过程都是有多个流程块组成. 比如:判断是否下雨的过程 1.布尔值 在第一章最后举例了比较操作后,最终返回的结果 True or False True 和 False是一 ...

  8. Python第二章-变量和数据类型

    变量和数据类型 一.什么是变量,常量 思考:程序执行指的是什么? 对数据进行存储处理和计算,最终获得结果,这是程序执行的本质. 变量的概念和在数学中的变量的概念一样的,只是在计算机程序中,变量不仅可以 ...

  9. 第二章 控件架构与自定义控件详解 + ListView使用技巧 + Scroll分析

    1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWindow将DecorView作为整个应用窗口的根V ...

  10. Python第二章(北理国家精品课 嵩天等)

    一.深入理解Python语言 语法简洁 >13万第三方库 二.Python蟒蛇绘制 #PythonDraw.py import turtle turtle.setup(650,350,200,2 ...

随机推荐

  1. dedebiz友情链接样式修改

    文件位置 /system/taglib/flink.lib.php 45行位置 根据自己需求修改就行

  2. 【Python爬虫】python打印本地代理

    在进行网络爬虫时,使用代理是非常重要的.因为爬虫经常会被网站封 IP,而代理可以隐藏你的真实 IP 地址,让你可以更不受限制地爬取数据.本文将介绍如何在 Python 中打印代理,包括代理 IP 的使 ...

  3. 浅谈TCP协议的发生过程

    1. TCP协议 1.1 TCP协议的性质 面向连接的.可靠的.基于字节流 至于为什么面向连接,又为什么可靠,基于字节流的,等后面便可知道. 1.2 TCP协议栈收发数据的四个阶段 创建套接字 连接服 ...

  4. fatal: 无法访问 'https://github.com/nmww/lingyun.git/':Failed to connect to github.com port 443 after 13 ms: Connection refused

    fatal: 无法访问 'https://github.com/nmww/lingyun.git/':Failed to connect to github.com port 443 after 13 ...

  5. Oracle和达梦:连接多行查询结果

    Oracle和达梦:LISTAGG连接查询结果 LISTAGG介绍 使用LISTAGG函数,您可以将多行数据连接成一个字符串,并指定分隔符进行分隔.这在需要将多行数据合并为单个字符串的情况下非常有用, ...

  6. 关于react提问以及解答

    1. 请教个工程问题. 团队运用webpack打包前端代码,转译后的文件每次都需要push到代码库远端:从开发角度而言,是不希望这部分代码在代码库的:两个原因:1是不方便代码review,2是代码仓库 ...

  7. Linux g++减小可执行文件大小

    去掉参数-g,产生不带有调试信息的可执行文件 加上参数-O2,产生尽可能小和尽可能快的代码 strip 可执行文件 去掉目标文件中的一些符号表.调试符号表信息,以减小程序的大小 参考文献: g++重要 ...

  8. html5学习内容-6(flex)

    弹性布局–flex (一)视口单位主要包括以下4个: vw:1vw等于视口宽度的1% vh:1vh等于视口高度的1% vmin:选取vm和vh中最小的那个 vmax:选取vm和vh中最大的那个 常用于 ...

  9. Ubuntu(Linux)上好用的Git图形客户端工具

    Git 为什么要用图形客户端 提示 下述工具下载链接为官方或github地址,可能会由于你懂得的原因,而无法打开. Git 大部分工作在命令行模式下都可以顺利且高效的完成, 但在代码合并,代码差异浏览 ...

  10. elrond32

    前置知识 int __cdecl main(int argc, char **argv) * argc: 整数, 为传给main()的命令行参数个数.* argv: 字符串数组.argv[0] 为程序 ...