1、字典的基本情况是key:value,这样的一种键-值对模式,并且字典可存储的信息量几乎不受限制。通过访问键,来获取对应的值。键和值之间使用(:)分开。字典是用{}表示的,字典内的元素使用(,)分开。最简单的字典如下:
alien_0 = {‘color‘: ‘green‘, ‘point‘: 5}
这里‘color‘和‘point‘是一个键,‘green‘和5是一个值。
2、为了获取字典中某个键的值,可以直接访问该字典中的键:
>>> alien_0 = {‘color‘: ‘green‘}
>>> print(alien_0[‘color‘])
green
3、添加键值对:
>>> print(alien_0)
{‘color‘: ‘green‘}
>>> alien_0[‘x‘] = 0
>>> alien_0[‘y‘] = 100
>>> print(alien_0)
{‘x‘: 0, ‘y‘: 100, ‘color‘: ‘green‘}
注意了,字典是不关心排列顺序的,也就是说添加顺序和排列顺序是没有关系的。字典只关心键和值之间的关系。
4、使用字典来存储用户提供的数据或者在编写能自动生成大量键-值对的代码时,通常需要先定义一个空字典:
>>> alien_0 = {}
>>> alien_0[‘color‘] = ‘green‘
>>> alien_0[‘points‘] = 5
>>> print(alien_0)
{‘points‘: 5, ‘color‘: ‘green‘}
5、修改字典中的值:
>>> print(alien_0)
{‘points‘: 5, ‘color‘: ‘green‘}
>>> alien_0[‘points‘] = 6
>>> print(alien_0)
{‘points‘: 6, ‘color‘: ‘green‘}
就是把字典中的键对应新的值,就是修改字典中的键中的值。
6、删除键值对:
>>> print(alien_0)
{‘points‘: 6, ‘color‘: ‘green‘}
>>> del alien_0[‘points‘]
>>> print(alien_0)
{‘color‘: ‘green‘}
注意,删除时,减-值对是一起删除的。是永远消失,不是临时性的。
7、对于较长的字典,可以使用Python的缩进配合换行来实现优雅的键入字典的键值对:
>>> languages = {
... ‘alex‘: ‘python‘,
... ‘ruifeng‘: ‘c‘,
... ‘johnny‘: ‘perl‘,
... }
>>> print(languages)
{‘ruifeng‘: ‘c‘, ‘johnny‘: ‘perl‘, ‘alex‘: ‘python‘}
可以看到,字典中的键-值对都进行了缩进,并且在最后一个键-值对后加入了(,)。对于其它需要输入很长的内容,比如print()函数内需要输入的内容很长,可以在()内换行继续写,新行是需要进行缩进的。
8、遍历键-值对的特殊取法:
>>> print(my_friend_1)
{‘sex‘: ‘male‘, ‘age‘: ‘31‘, ‘city‘: ‘Shanghai‘, ‘name‘: ‘Cao Xiao Jun‘}
>>> for key, value in my_friend_1.items():
... print("\nkey: " + key)
... print("value: " + value)
...
key: sex
value: male
key: age
value: 31
key: city
value: Shanghai
key: name
value: Cao Xiao Jun
items()方法用于返回一个键-值对列表。之后分别把键存入key变量,值存入value变量。"\n"表示插入一个回车符号。注意,即使是遍历字典,也是不关注顺序的,因为字典的核心是键-值对的关联性。
9、以上是取键-值对,如果只需要取键,而不需要值时,则使用keys()方法:
>>> print(my_friend_1)
{‘sex‘: ‘male‘, ‘age‘: ‘31‘, ‘city‘: ‘Shanghai‘, ‘name‘: ‘Cao Xiao Jun‘}
>>> for key in my_friend_1.keys():
... print("\nkey: " + key)
...
key: sex
key: age
key: city
key: name
如果省略keys()方法,即 for key in my_friend_1:,则默认取键,但是建议写,这样读起来容易理解。
10、字典的遍历是不会排序的,如果的确需要对输出进行排序,可以人工干预,使用sorted()函数:
>>> for thing in sorted(my_friend_1.keys()):
... print(thing)
...
age
city
name
sex
11、如果需要遍历字典中的值,可以使用values()方法,它返回一个值列表,但是不包含键:
>>> print(my_friend_1)
{‘sex‘: ‘male‘, ‘age‘: ‘31‘, ‘city‘: ‘Shanghai‘, ‘name‘: ‘Cao Xiao Jun‘}
>>> for values in my_friend_1.values():
... print(values)
...
male
31
Shanghai
Cao Xiao Jun
考虑到值有时候会有重复,使用set()函数,可以去除重复:
>>> print(my_friend_1)
{‘sex‘: ‘male‘, ‘new‘: 31, ‘name‘: ‘Cao Xiao Jun‘, ‘city‘: ‘Shanghai‘, ‘new_1‘: ‘31‘, ‘age‘: ‘31‘}
>>> for i in set(my_friend_1.values()):
... print(i)
...
Cao Xiao Jun
male
Shanghai
31
31
12、将一系列字典存储在列表中,或者将列表作为值存储在字典中,这称为嵌套。你可以在列表中嵌套字典、在字典中嵌套列表,甚至在字典中嵌套字典。
#!/usr/bin/env python3
alien_0 = {‘color‘: ‘green‘, ‘points‘: 5}
alien_1 = {‘color‘: ‘yellow‘, ‘points‘: 10}
alien_2 = {‘color‘: ‘red‘, ‘points‘: 15}
aliens = [alien_0,alien_1,alien_2]
for alien in aliens:
print(alien)
这是一种典型的嵌套,把字典作为一个值,写入列表中,此时遍历列表,就是打印列表的每个元素,就是每个字典:
[[email protected] ex-python]# ./name_cases.py
{‘color‘: ‘green‘, ‘points‘: 5}
{‘color‘: ‘yellow‘, ‘points‘: 10}
{‘color‘: ‘red‘, ‘points‘: 15}
嵌套循环的一个例子:
#!/usr/bin/env python3
aliens = []
for alien_number in range(30):
new_alien = {‘color‘: ‘green‘, ‘points‘: 5, ‘speed‘: ‘slow‘}
aliens.append(new_alien)
for alien in aliens[:5]:
print(alien)
print("...")
print("Total number of aliens: " + str(len(aliens)))
其中,for alien_number in range(30):,就是表示循环30次。
这是一种特殊的写法,可以看到alien_number这个变量在接下来的语句中并没有出现,配合range(30)[也就是range(0,30)]函数,实现了循环30次的效果。
13、在字典中存储列表:
[[email protected] ex-python]# cat name_cases.py
#!/usr/bin/env python3
favorite_languages = {
‘jen‘: [‘python‘, ‘ruby‘],
‘sarah‘: [‘c‘],
‘edward‘: [‘ruby‘, ‘go‘],
‘phil‘: [‘python‘,‘haskell‘],
}
for name, languages in favorite_languages.items():
print("\n" + name.title() + "‘s favorite languages are:")
for language in languages:
print("\t" + language.title())
输出:
[[email protected] ex-python]# ./name_cases.py
Phil‘s favorite languages are:
Python
Haskell
Jen‘s favorite languages are:
Python
Ruby
Edward‘s favorite languages are:
Ruby
Go
Sarah‘s favorite languages are:
C
14、在字典中存储字典,但是这样做代码很可能很快复杂起来:
[[email protected] ex-python]# cat name_cases.py
#!/usr/bin/env python3
users = {
‘user_1‘: {
‘first‘: ‘alex‘,
‘last‘: ‘hou‘,
‘location‘: ‘dalian‘,
},
‘user_2‘: {
‘first‘: ‘johnny‘,
‘last‘: ‘zhu‘,
‘location‘: ‘shanghai‘,
},
}
for username, user_info in users.items():
print("\nUsername: " + username )
full_name = user_info[‘first‘] + " " + user_info[‘last‘]
location = user_info[‘location‘]
print("\tFull name: " + full_name.title())
print("\tLocation: " + location.title())
输出:
[[email protected] ex-python]# ./name_cases.py
Username: user_1
Full name: Alex Hou
Location: Dalian
Username: user_2
Full name: Johnny Zhu
Location: Shanghai