整个字典用大括号包围
每个键用引号包围
各个值用引号包围
键和相应的值之间用冒号隔开
键值对之间用逗号隔开

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函数可以保证将一个不存在的键初始化为一个默认的指定值如果键已存在,那么关联值保持不变

分类: Python

发表评论

电子邮件地址不会被公开。 必填项已用*标注