Python字典推导法,怎么输出嵌套字典?

Python016

Python字典推导法,怎么输出嵌套字典?,第1张

实际上各种推导式的本质就是for循环, 它们之间的区别只是取值方式的不同和表达式的不同

首先, 字典的取值方式有两种: 按key取值, 使用get方法取值

其次, 字典推导式的表达式部分需要写成 key:value 的形式

如果要使用字典推导式推导一个嵌套字典

例如:

infos = {"张三":{ "age":18, "salary":5000},

"李四":{"age":19, "salary":8000},

"王五":{ "age":20, "salary":6000}}

要从infos这个嵌套的字典中推导出一个形如{"张三":5000, "李四":8000, "王五":6000}的字典

首先可以考虑最内层的推导式:

names = [name for name in infos]

这样就得到了一个姓名的列表: ["张三", "李四", "王五"]

再迭代这个列表, 生成字典的每一项, 于是字典生成式应该像下面这样:

salary_dict = {name:薪资 for name in names}

在这里, 因为name正好是infos这个字典的key, 所以可以使用name从字典infos中取出对应的薪资, 于是有下面的形式:

salary_dict = {name:infos[name]["salary"] for name in names}

这里就用到的字典的用key取值的方式, 当然, 也可以用get方法取值, 例如下面的形式:

salary_dict = {name:infos.get(name).get("salary") for name in names}

这两种方式都是可以的, 根据个人喜好选择就好

为了显得逼格更高, 可以把names的列表推导式和salary_dict的字典推导式结合起来, 于是就得到下面的形式:

salary_dict = {name:infos[name]["salary"] for name in (name for name in infos)}

到这里, 你会发现表达式里有好多name, 显得非常重复, 实际上这里并不需要列表推导式, 直接从字典里迭代出来的key就是name了, 所以最终的形式如下:

salary_dict = {name:infos[name]["salary"] for name in infos}

这里为了得到一个比较简单的结果而绕了一个大圈子, 是为了说明更加通用方法, 对于这个例子, 很容易就能得出结果的哈

答: 具体问题具体分析,可使用一个for循环遍历整个字典得到 value值对应的键。

实现代码

如上所示,扫描整个字典,再将字典每个键的值和10,002相比较,如果相等则加入到一个列表当中并打印输出,结果如下所示,找到了键。

运行结果

希望能够帮助到你~

for-in 循环专门用于遍历范围、列表、元素和字典等可迭代对象包含的元素。

for-in 循环的语法格式如下:

for 变量 in 字符串|范围|集合等:

statements

对于上面的语法格式有以下两点说明:

for-in 循环中的变量的值受 for-in 循环控制,该变量将会在每次循环开始时自动被赋值,因此程序不应该在循环中对该变量赋值。

for-in 循环可用于遍历任何可选代对象。所谓可迭代对象,就是指该对象中包含一个 __iter__ 方法,且该方法的返回值对象具有 next() 方法。

for-in 循环可用于遍历范围。例如,如下程序使用 for-in 循环来计算指定整数的阶乘:

s_max = input("请输入您想计算的阶乘:")

mx = int(s_max)

result = 1

# 使用for-in循环遍历范围

for num in range(1, mx + 1):

result *= num

print(result)

上面程序将会根据用户输入的数字进行循环。假如用户输入 7,此时程序将会构建一个 range(1,8) 对象(不包含 8),因此 for-in 循环将会自动循环 7 次,在每次循环开始时,num 都会被依次自动赋值为 range 所包含的每个元素。

for-in 循环中的变量完全接受 for-in 循环控制,因此该变量也被称为循环计数器。