查看原文
其他

Python基础编程—字典篇(二)

JackTian 杰哥的IT之旅 2019-05-08

温馨提示

       如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。



遍历字典


一个Python字典可能包含几个键-值对,也可能包含数百万个键-值对。鉴于字典可能包含大量的数据,Python支持对字典遍历。字典可用于各种当时存储信息,因此有多种遍历字典的方式:可遍历字典的所有键-值对、键或值。


遍历所有的键-值对

搜索各种遍历方法前,先来看一个新字典,它用于存储相关网站用户的信息。可利用本篇前面介绍过的知识,访问user_0的任何一项信息,但如果要熟悉该用户字典中的所有信息,该怎么办呢?可以使用一个for循环来遍历这个字典。


for语句的第二部分包含字典名和方法item()(红点6),它返回一个键-值对列表。然后,for循环依次将每个键-值对存储到指定的两个变量中。在前面示例中,我们使用这两个变量来输出每个键(红点7)及其相关联的值(红点8)。第一条print语句中的“\n”确保在输出每个键-值对前都插入一个空行;


注意:即便遍历字典时,键-值对的返回顺序也与存储顺序不同。Python不关心键-值对的存储顺序,而只跟踪键和值之间的关联关系。



       字典存储的是不同人的同一种信息;对于类似这样的字典,遍历所有的键-值对很合适。如果遍历字典favorite_languages,将得到其中每个人的姓名和喜欢的编程语言。由于其中的键都是人名,而值都是语言,因此我们在循环中使用变量name和language,而不是key和value。



     (红点8)的代码让Python遍历字典中的每个键-值对,并将键存储在变量name中,而将值存储在变量language中。这些描述性名称能让人明白print语句(红点9)是做什么的。



遍历字典中的所有键

在不需要使用字典中的值时,方法keys()很有用。(红点8)的代码让Python提取字典favorite_languages中的所有键,并依次将他们存储到变量name中。



       遍历字典时,会默认遍历所有的键,因此,如果将上述代码中的for name in favorite_languages.keys():替换为for name in favorite_languages:,输出结果不变;


       在这种循环中,可使用当前键来访问与之相关联的值。



     (红点8),首先创建一个列表,其中包含我们要通过打印消息,指出其喜欢的语言的朋友。在循环中,我们打印每个人的名字,并检查当前的名字是否在列表friend中(红点12)。如果在列表中,就打印一句特殊的问候语,其中包含喜欢的语言。为访问喜欢的语言,我们使用了字典名,并将变量name的当前值作为键(红点15)。输出结果如下图所示;



按顺序遍历字典中的所有键


字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。


通常是获取与键相关联的正确值。


要以特定的顺序返回元素,一种方法是for循环中对返回的键进行排序,可使用函数sorted()来获取按特定顺序排列的键列表副本;



      这条for语句类似于其他for语句,但对方法dictionary.keys()的结果调用了函数sorted()。列出字典中的所有键,并在遍历前对这个列表进行排序。(输出如下:按顺序显示了所有被调查者的名字)



遍历字典中的所有值


主要是字典包含的值,可使用方法values(),它返回一个值列表,而不包含任何键。

例如:想获得一个这样的列表,即其中只包含被调查者选择的各种语言,而不包含被调查者的名字;


       这条for语句提取字典的每个值,并将它们依次存储到变量language中。通过输出的结果,获得一个列表,其中包含被调查者选择的各种语言;


       这种做法提取字典中所有的值,而没有考虑重复项。值少时,也许不是问题,但如果被调查的很多,最终的列表可能包含大量的重复项。



为剔除重复项,可使用集合(set)来完成;



       通过对包含重复元素的列表调用set(),找出列表中独一无二的元素,并使用这些元素来创建一个集合。

       在(红点9)使用了set()来提取favorite_language.values()中不同的语言。结果是一个不重复的列表,并列出了被调查者提及的所有语言;


嵌套


有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,称为嵌套。

你可以在列表中嵌套字典,在字典中嵌套列表甚至在字典中嵌套字典。


字典列表



       首先创建三个字典,其中每个字典都表示一个外星人。在红点5,我们将这些字典都放到一个名为aliens的列表中。最后,遍历这个列表,并将每个进行输出;



在字典中存储列表


有时候,需要将列表存储在字典中,而不是将字典存储在列表中。



       现在与每个名字相关联的值都是一个列表(红点1)。有些人喜欢的语言是一种,而有些人是多种。遍历字典时(红点8),使用了变量languages来依次存储字典中的每个值,因为我们知道这些值都是列表。在遍历字典的主循环中,我们又使用了一个for循环来遍历每个人喜欢的语言列表(红点10)。



注意:列表和字典的嵌套层级不应太多。


在字典中存储字典


可在字典中嵌套字典,但这样做时,代码可能很快复杂起来。例如,如果有多个网站用户,每个都有独特的用户名,可在字典中将用户名作为键,然后将每位用户的信息存储在一个字典中,并将该字典作为与用户名相关联的值。



       首先定义一个名为users的字典,其中包含两个键:(如下)

用户名‘aeinstein’和‘mcurie’:与每个键相关联的值都是一个字典,其中包含用户的名、姓、居住地。在(红点16)遍历字典users,让Python依次将每个键存储在变量username中,并依次将与当前键相关联的字典存储在变量user_info中。在主循环内部的(红点17)中,进行输出。


     (红点18)中,开始访问内部的字典。变量user_info包含用户信息字典,而该字典包含三个键,‘frist’、‘last’、‘location’;对于每位用户,都使用这些键来生成整洁的姓名和居住地,然后输出有关用户的简要信息(红点21);



本人其他Python相关文章

Python变量和简单数据类型(一)

Python变量和简单数据类型(二)

Python编程入门到实践—列表篇(一)

Python编程入门到实践—列表篇(二)

Python基础编程—操作列表篇(一)

Python基础编程—操作列表篇(二)

Python基础编程——if语句篇(一)

Python基础编程——if语句篇(二)

Python基础编程—字典篇(一)

END



好文!必须点赞

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存