Python遍历字典(62)

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

python大大的图

图片发自简书App

我的图

图片发自简书App

1.遍历所有的键——值对

要编写用于遍历字典的for循环,可声明两个变量,用于存储键——值对中的键和值。对于这两个变量,可使用任何名称。for语句的第二部分包含字典名和方法items(),它返回一个键——值对列表。接下来,for循环依次将每个键——值对存储到指定的两个变量中。我们使用这两个变量来打印每个键及其相关的值。第一条print语句中的"\n"确保在输出每个键——值对前都插入一个空行。

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

2.遍历字典中的所有键

在不需要使用字典中的值时,方法keys()很有用。第八行让Python提取字典user_0中所有键,并依次将它们存储到变量key中。遍历字典时默认遍历所有的键,因此如果将for key in user_0.keys():改为for key in user_0:,输出将不变。

图片发自简书App

如果显示地使用方法keys()可让代码更容易理解,你可以选择这样做,但如果你愿意,也可省略它。

方法keys()并非只能用于遍历;实际上,它返回一个列表,其中包含字典中的所有键。我们用if语句判断'erin'是否处于这个列表中,如果不在,就打印一条消息,邀请她参加调查

图片发自简书App

3.按字母顺序遍历字典中所有键

字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。这不是问题,因为通常你想要的只是获取与键相关联的正确的值。要以特定的顺序返回元素,一种方法是在for循环中对返回的键进行排序。为此,可使用函数sorted()来获得按特定顺序排列的键列表的副本。

图片发自简书App

这条for语句类似于其他for语句,但对dictionary.keys()的结果调用了函数sorted()。这让Python列出字典中的所有键,并在遍历前对这个列表进行排序。输出表明,键按照首字母从小到大排列。

函数原型

sorted(iterable, key, reverse)

其中iterable表示可以迭代的对象,例如可以是dict.items()、dict.keys()等,key是一个函数,用来选取参与比较的元素,reverse则是用来指定排序是倒序还是顺序,reverse=true是倒序,reverse=false是顺序,默认reverse=false。

在sorted()里的user_0.keys()将字典转化为列表,因此可以使用索引,用lambda函数按key中索引为1的元素正序排序,结果如下图。这里需要注意的是,字典本身是没法按索引取值的,因为它没有固定的顺序,只能按键取值。

图片发自简书App

按第一个元素倒序排列结果如下

图片发自简书App

4.遍历字典中所有值

如果你感兴趣的主要是字典包含的值,可使用方法values(),它返回一个列表,而不包含任何键。这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量的重复项。为剔除重复项,可使用集合(set)。集合类似于列表,但每个元素都必须是独一无二的。

在遍历值时无法根据值取出键。由于字典是hash的,我们只能通过键得到值,不能通过值得到键。这也很好理解,不同的键可以对应同一个值,因此我们去找这个值的键是不唯一的。由此看来,我们用for循环遍历字典的时候只存在两种方法,要么遍历键和值,要么遍历键。我们可以遍历值,但是这样没有函数可以得到它的键。

虽然我们不能通过遍历值遍历字典,但是我们可以写if语句得到值对应的键

图片发自简书App

推荐阅读更多精彩内容