当前位置:嗨网首页>书籍在线阅读

11-嵌套的字典和列表

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.3.2 嵌套的字典和列表

对井字棋盘建模相当简单:棋盘只需要一个字典,包含9个键-值对。当你对复杂的事物建模时,可能发现字典和列表中需要包含其他字典和列表。列表适用于包含一组有序的值,字典适用于包含关联的键与值。例如,下面的程序使用字典包含其他字典,用于记录谁为野餐带来了什么食物。 totalBrought() 函数可以读取这个数据结构,计算所有客人带来的食物的总数:

allGuests = {'Alice': {'apples': 5, 'pretzels': 12},
             'Bob': {'ham sandwiches': 3, 'apples': 2},
             'Carol': {'cups': 3, 'apple pies': 1}}
def totalBrought(guests, item):
    numBrought = 0
  ❶ for k, v in guests.items():
      ❷ numBrought = numBrought + v.get(item, 0)
    return numBrought
print('Number of things being brought:')
print(' - Apples         ' + str(totalBrought(allGuests, 'apples')))
print(' - Cups           ' + str(totalBrought(allGuests, 'cups')))
print(' - Cakes          ' + str(totalBrought(allGuests, 'cakes')))
print(' - Ham Sandwiches ' + str(totalBrought(allGuests, 'ham sandwiches')))
print(' - Apple Pies     ' + str(totalBrought(allGuests, 'apple pies')))

可以在https://autbor.com/guestpicnic/上查看该程序的执行情况。在 totalBrought() 函数中, for 循环迭代 guests 中的每个键-值对❶。在这个循环里,客人的名字字符串赋给 k ,他们带来的野餐食物的字典赋给 v 。如果食物参数是字典中存在的键,那么它的值(数量)就被添加到 numBrought ❷。如果它不是键, get() 方法就返回0,被添加到 numBrought

该程序的输出结果像这样:

Number of things being brought:
- Apples 7
- Cups 3
- Cakes 0
- Ham Sandwiches 3
- Apple Pies 1

这似乎是对一个非常简单的东西建模,你可能认为不需要费事去写一个程序来做到这一点。但是要认识到,函数 totalBrought() 可以轻易地处理一个字典,其中可以包含数千名客人,每个人都带来了“数千种”不同的食物。用这种数据结构来保存信息,并使用 totalBrought() 函数,就会节约大量的时间。

你可以用自己喜欢的任何方法来用数据结构对事物建模,只要程序中的其他代码能够正确处理这个数据模型。在刚开始编程时,不需要太关心数据建模的“正确”方式。随着经验的增加,你可能会得到更有效的模型,重要的是该数据模型符合程序的需要。