遍历字典
一个python字典可能包含几个键值对,也可能包含数百万个键值对。鉴于字典可能包含大量数据,python支持对字典进行遍历。字典可用于以各种方式存储信息,因此有多种遍历方式:可遍历字典的所有键值对,也可以仅遍历键或值。
遍历所有的键值对
user_0 ={'username':'efermi',
'first':'enrico',
'last':'fermi',}
利用本章前面介绍的信息,可以访问user_0的任何一项信息,但如果要获悉该用户字典中的所有信息,该怎么办呢?可以使用for循环来遍历这个字典。
for key, value in user_0.items():
print(f"\nKey:{key}")
print(f"Value:{value}")
Key:username
Value:efermi
Key:first
Value:enrico
Key:last
Value:fermi
要编写遍历字典的for循环,可声明两个变量,用于存储键值对中的键和值。这两个变量可以使用任意名称。
for语句的第二部分包含字典名和数值items(),它返回一个键值对列表。接下来for循环依次将每个键值对赋给指定的两个变量。
如果遍历字典favorite_languages,将得到其中每个人的姓名和喜欢的编程语言,由于该字典中的键都是人名,值都是语言,因此循环中使用变量name和languages,而不是key和value。
favorite_languages = {'jen':'python',
'sarah':'c',
'cdward':'ruby',
'phil':'python'}
for name, language in favorite_languages.items():
print(f"\n{name.title()}'s favorite language is {language.title()}.")
Jen's favorite language is Python.
Sarah's favorite language is C.
Cdward's favorite language is Ruby.
Phil's favorite language is Python.
遍历字典中的所有的键
在不需要使用字典的值时,方法key()很有用。下面来遍历字典favorite_languages中所有的键,并依次将它们赋给变量输出列出了每个被调查者的名字。
# 让python提取字典中的所有键,并依次将它们赋给变量name,输出列出每个被调查者的名字。
for name in favorite_languages.keys():
print(name.title())
Jen
Sarah
Cdward
Phil
friends = ['phil', 'sarah']
for name in favorite_languages.keys():
print(f"Hi {name.title()}.")
if name in friends:
language = favorite_languages[name].title()
print(f"\t{name.title()}, I see you love {language}!")
Hi Jen.
Hi Sarah.
Sarah, I see you love C!
Hi Cdward.
Hi Phil.
Phil, I see you love Python!
if 'erin' not in favorite_languages.keys():
print("Erin please tak our poll!")
Erin please tak our poll!
方法key()并非只能用于遍历,实际上,它返回一个列表,其中包含了字典中的所有的键。
按特定顺序遍历字典中的所有键
从python3.7起,遍历字典时将按插入的顺序返回其中的元素。我们有些时候可能需要按照与此不同的顺序遍历字典。
要以特定的顺序返回元素,一种办法是在for循环中对返回的键进行排序。为此,可使用sorted()来获得按特定顺序排列的键列表的副本。
favorite_language = {'jen':'python',
'saran':'c',
'edward':'ruby',
'phil':'python',
}
for name in sorted(favorite_language.keys()):
print(f"{name.title()}, thank you for taking the polling!")
Edward, thank you for taking the polling!
Jen, thank you for taking the polling!
Phil, thank you for taking the polling!
Saran, thank you for taking the polling!
遍历字典中的所有信息
如果主要对字典中的值比较感兴趣,可使用方法values()来返回一个值列表,不包含任何键。如果我们想要获得一个列表里面只包含了被调查者的语言,而不包含被调查者的名字,我们可以这样做:
favorite_language = {'jen':'python',
'saran':'c',
'edward':'ruby',
'phil':'python',
}
print("The following languages have been mentioned:")
for language in favorite_language.values():
print(language.title())
The following languages have been mentioned:
Python
C
Ruby
Python
我们发现在语言中有很多的值会重复出现,为了调查清楚喜欢语言的类型我们不让语言类型进行重复使用(set)。集合中的每一元素都是独一无二的,
通过对包含重复元素的列表用set(),可以让python找出列表中独一无二的元素,并使用这些元素创建一个集合。
for language in set(favorite_language.values()):
print(language.title)
Ruby
C
Python
注意:可以使用一对花括号直接创建集合,并在其中用逗号分隔元素。
集合和字典很容易混淆,因为它们都是用一堆花括号来定义的。当花括号内没有键值对的时候,缝合很大可能是集合。不同于列表和字典,集合不会以特定的顺序存储元素。