字典

本节我们将使用下Python中的字典。字典是一个数据结构,它的索引值是给定的key(是一个key-value对的形式)。
下面的例子展示了以同学的名字为索引,值为年龄的字典:

  1. ages = {
  2. "Peter": 10,
  3. "Isabel": 11,
  4. "Anna": 9,
  5. "Thomas": 10,
  6. "Bob": 10,
  7. "Joseph": 11,
  8. "Maria": 12,
  9. "Gabriel": 10,
  10. }
  11. >>> print(ages["Peter"])
  12. 10

使用一个字典的items可以迭代出其中的内容,比如这样:

  1. >>> for name, age in ages.items():
  2. ... print(name, age)
  3. ...
  4. Peter 10
  5. Isabel 11
  6. Anna 9
  7. Thomas 10
  8. Bob 10
  9. Joseph 11
  10. Maria 12
  11. Gabriel 10

不过,字典的key并不需要是一个字符串,它可以是任何不可变对象:

  1. d = {
  2. 0: [0, 0, 0],
  3. 1: [1, 1, 1],
  4. 2: [2, 2, 2],
  5. }
  6. >>> d[2]
  7. [2, 2, 2

同时你可以将另一个字典作为某个值写入:

  1. students = {
  2. "Peter": {"age": 10, "address": "Lisbon"},
  3. "Isabel": {"age": 11, "address": "Sesimbra"},
  4. "Anna": {"age": 9, "address": "Lisbon"},
  5. }
  6. >>> students['Peter']
  7. {'age': 10, 'address': 'Lisbon'}
  8. >>> students['Peter']['address']
  9. 'Lisbon'

因此,这种结构非常容易书写阶级式内容。

字典部分练习

自行研究Python文档 https://docs.python.org/3/library/stdtypes.html#mapping-types-dict 来解决下列练习。

先定义一个Python字典:

  1. ages = {
  2. "Peter": 10,
  3. "Isabel": 11,
  4. "Anna": 9,
  5. "Thomas": 10,
  6. "Bob": 10,
  7. "Joseph": 11,
  8. "Maria": 12,
  9. "Gabriel": 10,
  10. }
  1. 这个字典中有多少个同学?可以参考下len函数。
  2. 写一个函数,接受“ages”字典作为参数,返回的是其中年龄的平均值。遍历字典中所有的项使用的是items参数。
  3. 写一个函数,接受“ages”字典作为参数,返回年龄最大的同学的名字。
  4. 写一个函数,接受“ages”字典和数字“n”作为参数,返回的是一个新字典,新字典中每个同学的年龄均是“n”。比如,new_ages(ages, 10)返回的是“ages”字典的拷贝并且每个同学的年龄都是10。

子字典部分练习

先定义一个字典:

  1. students = {
  2. "Peter": {"age": 10, "address": "Lisbon"},
  3. "Isabel": {"age": 11, "address": "Sesimbra"},
  4. "Anna": {"age": 9, "address": "Lisbon"},
  5. }
  1. “students”字典中有多少个同学?
  2. 写一个函数接受“students”字典,返回平均年龄。
  3. 写一个函数接受“students”字典和一个地址(address)参数,返回一个列表,内容是所有与传入的地址相匹配的同学的名字。
    比如,调用find_students(students, 'Lisbon')会返回['Peter', 'Anna']