Python中的字典(dictionary)就是一组键值对(key:value pair)的集合。类似于其它语言中的Map或lookup table。
key必须是字符串,value可以是任何对象。
key和value都可以使用变量。
简单字典
student = {'name': 'tony', 'age': 14}
print(student ['name'])
print(student ['age'])
使用字典
字典包含在{
和}
之间,成员(键值对)间用,
分隔。通过键(key)可以访问成员的值(value)。
空字典如下定义:
student = {}
为字典增加成员直接赋值即可,如果key已存在则相当于更新:
>>> student = {'name': 'tony', 'age': 14}
>>> student['grade']=7
>>> print(student)
{'grade': 7, 'age': 14, 'name': 'tony'}
>>> student['age']=15
>>> print(student)
{'grade': 7, 'age': 15, 'name': 'tony'}
>>> student['age'] += 1
>>> print(student)
{'grade': 7, 'age': 16, 'name': 'tony'}
删除成员使用del,这和List一样:
>>> del student['age']
>>> print(student)
{'grade': 7, 'name': 'tony'}
一种美观的写法:
>>> student = {
... 'name':'tony',
... 'age':14
... }
如果key不存在,访问其中的值会报错:
>>> student['gender']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'gender'
这是需要使用get()方法,第一个参数是key,第二个参数是可选的,当key未赋值时,返回此值:
>>> student.get('gender', 'No value assigned')
'No value assigned'
如果key未赋值,并且get方法未指定第二个参数时,返回None,相当于SQL中的Null:
>>> ret = student.get('gender')
>>> ret
>>> print(ret)
None
当然,None也可以直接作为value:
>>> a={'a':None,'b':None}
>>> print(a.get('a'))
None
遍历字典
采用如下形式:
for k, v in dictionary.items()
示例:
$ cat months.py
months = {'jan':1, 'feb':2, 'march':3, 'apr':4}
for k,v in months.items():
print(f"key is {k.upper()}, value is {v}")
print()
for k in months.keys():
print(f"key is {k.upper()}")
print()
for v in months.values():
print(f"value is {v}")
$ python3 months.py
key is JAN, value is 1
key is FEB, value is 2
key is MARCH, value is 3
key is APR, value is 4
key is JAN
key is FEB
key is MARCH
key is APR
value is 1
value is 2
value is 3
value is 4
如果要以一定顺序访问字典中的key,可以使用sorted函数:
for k in sorted(dictionary.keys()):
...
字典中的key当然是唯一的,但value有可能充分,我们可以通过set函数去除重复值:
>>> ages = {'tony':14, 'tom':14, 'ivan':15}
>>> ages.values()
dict_values([14, 14, 15])
>>> set(ages.values())
{14, 15}
set可以认为是具有唯一值的List,其定义与dictionary很相似,也是用{
和}
,当成员不是key:value,而是单个的值。
>>> colors = {'red', 'blue', 'yellow', 'red'}
>>> colors
{'yellow', 'blue', 'red'}
嵌套
首先,嵌套是指字典可作为List的成员。
$ cat students.py
students = []
for i in range(4):
students.append({'no':i, 'name':'student' + f"{i}"})
print(students)
print()
for student in students[1:3]:
print(student)
$ python3 students.py
[{'no': 0, 'name': 'student0'}, {'no': 1, 'name': 'student1'}, {'no': 2, 'name': 'student2'}, {'no': 3, 'name': 'student3'}]
{'no': 1, 'name': 'student1'}
{'no': 2, 'name': 'student2'}
其次,嵌套指字典的成员可以是List。
>>> student = {'name':'tony', 'friends':['flora', 'amy']}
最后,嵌套还可以指字典中可包含字典,也就是字典可以作为字典成员中的value。
>>> student = {'first':'vivian', 'last':'liu', 'age':14}
>>> students = {'vivian_liu':student}
>>> print(students)
{'vivian_liu': {'first': 'vivian', 'last': 'liu', 'age': 14}}