字典的基本用法
整个字典用大括号包围
每个键用引号包围
各个值用引号包围
键和相应的值之间用冒号隔开
键值对之间用逗号隔开
person =
{ ‘Name’: ‘Wasabi’,
‘Gender’: ‘Male’,
'Occupation': 'Student',
'Age': eighteen
}
字典不会维持插入的顺序
列表会维持对象插入时的顺序,但字典不会这么做。也就是说,字典中的数据是无序的
使用键访问字典中的数据
>>> person ['Name']
'Wasabi'
>>> person ['Occupation']
'Student'
在运行时处理字典
>>> person ['Country'] = "China"
>>> person
{ 'Name': 'Wasabi', 'Gender': 'Male', 'Occupation': 'Student',
'Age': 'Eighteen', 'Country': 'China' }
迭代处理键和值
我们看看迭代处理字典会出现什么:
>>> for kv in person:
... print(kv)
...
Name
Gender
Occupaiton
Age
Country
什么鬼?为什么只输出了键,值去哪里了?
原来,用for循环迭代处理一个字典时,解释器只处理字典的键。
要访问关联的数据值,需要将键放在中括号里,结合使用字典名和键来访问与这个键关联的值。
>>> for k in person:
... print(k,':',person[k])
...
Name : Wasabi
Gender : Male
Occupaiton : Student
Age : Eighteen
Country : China
指定输出时的字典顺序
vowels
>>> found = {}
>>> found
{}
>>> found['a'] = 0
>>> found['e'] = 0
>>> found['i'] = 0
>>> found['o'] = 0
>>> found['u'] = 0
>>> found
{'a': 0, 'e': 0, 'i': 0, 'o': 0, 'u': 0}
>>> found['e'] += 2
>>> found
{'a': 0, 'e': 2, 'i': 0, 'o': 0, 'u': 0}
第一种方法
Python提供了sorted内置函数,利用这个函数可以轻而易举地将键按顺序输出。
for k in sorted(found):
print(k, 'was found', found[k], 'time(s).')
输出如下:
a was found 0 time(s).
e was found 2 time(s).
i was found 0 time(s).
o was found 0 time(s).
u was found 0 time(s).
第二种方法
字典提供了大量内置方法,其中之一就是items方法。它会返回一个键/值对列表。在这里有两个循环变量,用sorted函数控制输出。
for k,v in sorted (found.items()):
print(k, 'was found', v, 'time(s).')
我们会看到输出同上。
sorted内置方法不会改变你提供的数据的顺序,只是返回这个数据的一个有序的副本。对于found字典,它按照字母顺序从A到Z排序。字典原来的顺序依旧保持不变。每次需要以某种特定的顺序迭代处理键值对时,都需要调用sorted方法。
使用setdefault省略初始化
vowels = {'a', 'e', 'i', 'o', 'u'}
word = input("Provide a word to search for vowels")
found = {}
found['a'] = 0
found['e'] = 0
found['i'] = 0
found['o'] = 0
found['u'] = 0
for letter in word:
if letter in vowels:
found[letter] += 1
for k,v in sorted(found.items()):
print(k, 'was found', v, 'time(s).')
我们发现,如果一个元音没有出现,程序会输出0次;但是若不进行初始化,直接found[letter] += 1会报错。那么,怎样动态进行初始化呢?
for letter in word:
if letter in vowels:
found.setdefault(letter, 0)
found[letter] += 1
用一个setdefault函数就可以啦
setdefault函数可以保证将一个不存在的键初始化为一个默认的指定值,如果键已存在,那么关联值保持不变