上QQ阅读APP看书,第一时间看更新
2.12.5 遍历
dict的键值对设计,让我们可以通过key快速精准地定位到对应的value。但是,有很多场景,我们还是需要遍历整个数据集。
比如,有如下所示一个字典对象。
players = { "001": { "name": "Harden", "id": "001", "position": "point guard" }, "002": { "name": "Davis", "id": "002", "position": "center" }, "003": { "name": "Leonard", "id": "003", "position": "forward" }, "004": { "name": "Curry", "id": "004", "position": "point guard" } }
用for和in,我们可以遍历字典。
for player in players: print(player)
执行结果如下:
001 002 003 004
从结果上来看,for/in遍历到的是字典的key的集合,从这个角度来看,以上代码中的“player”变量的命名是欠妥当的,会引起一些误解,应该用更合理的变量名来改进这段代码。
for player_id in players: print(player_id)
执行结果如下:
001 002 003 004
或者用dict的keys方法,来更明显地表明变量的意义。
for player_id in players.keys(): print(player_id)
根据遍历中得到的key,我们可以得到value。
for player_id in players: print(player_id, ':', players[player_id]['name'])
执行结果如下:
001 : Harden 002 : Davis 003 : Leonard 004 : Curry
这种遍历方式很简单,但是在循环体中,我们需要根据key得到value,这会让代码的可读性受到一些损害。字典的items方法可以让遍历的代码看起来更直观一点。
for player_id, player in players.items(): print(player_id, ':', player['name'])
执行结果如下:
001 : Harden 002 : Davis 003 : Leonard 004 : Curry
如果我们不在乎key,想更轻松地得到value,有没有更简洁的方法?
我们刚刚看过dict的keys方法,这个方法可以得到key的集合,因此应该有一个相应的values方法。
for player in players.values(): print(player['id'])
在学习的过程中,如果能从keys方法主动去联想和尝试values方法,我们就可以更加快速地了解这门编程语言,这是程序员应该掌握的学习方法。