2.3.2 什么是字典

创建一个变量roll,将派森号所有的运动员参赛项目的键值对都存放进去,用逗号(,)隔开,再用花括号({})把它们全部括起来,这就是一个字典了:


#派森号的参赛项目名册
roll={'格兰特蕾妮': ['10000公里竞速',0, '精准抛射', '着陆技巧', '星矿探索'],
      '大熊': [0,'20000公里避障飞行','精准抛射',0, '星矿探索'],
      '西西船长': ['10000公里竞速',0,'精准抛射', '着陆技巧', '星矿探索'],
      '克里克里': [0,'20000公里避障飞行','精准抛射', '着陆技巧', '星矿探索'],
      '菲菲兔': ['10000公里竞速',0,'精准抛射', '着陆技巧', '星矿探索'],
      '洛克威尔': ['10000公里竞速','20000公里避障飞行',0,'着陆技巧',0]
      }

“看起来挺整齐呀!”一旁观看许久的裁判长迪克纳瑞先生说道,“可是这个字典真能快速地告诉我每个队员的项目吗?”

“是的,裁判长先生。”洛克威尔说,“可以通过字典元素的键立即得到它对应的值。比如现在想知道我的参赛项目,可以这样做。”说着,洛克威尔输入了以下代码:


#引用字典元素
print(roll)                     #输出整个字典
name='洛克威尔'
print(name,"参加的项目是: ",roll[name])    #输出键'洛克威尔'对应的值

运行后输出为:


{'格兰特蕾妮': ['10000公里竞速', 0, '精准抛射', '着陆技巧', '星矿探索'],
    '大熊': [0, '20000公里避障飞行', '精准抛射', 0, '星矿探索'],
    '西西船长': ['10000公里竞速', 0, '精准抛射', '着陆技巧', '星矿探索'],
    '克里克里': [0, '20000公里避障飞行', '精准抛射', '着陆技巧', '星矿探索'],
    '菲菲兔': ['10000公里竞速', 0, '精准抛射', '着陆技巧', '星矿探索'],
    '洛克威尔': ['10000公里竞速', '20000公里避障飞行', 0, '着陆技巧', 0]}
洛克威尔 参加的项目是: ['10000公里竞速', '20000公里避障飞行', 0, '着陆技巧', 0]

看到了吧,只要告诉字典需要的“键”,立马就会得到对应的“值”。

使用方括号([])指明要访问的元素的key值即可获得对应的value值,相当于使用key值作为元素的下标,这样就不需要关心元素在字典中存放的位置了。

“那字典也和列表、元组、字符串一样,属于序列类型吗?”迪克纳瑞问。

“Oh,no!实际上,字典无法使用序号作为下标,否则代码就会产生错误,不信你试试?”洛克威尔对裁判长先生说。


>>> roll[3]                #试图返回字典的第4个下标元素
Traceback (most recent call last):
    File "<pyshell#2>", line 1, in <module>
        roll[3]                    #试图返回字典的第4个下标元素
KeyError: 3

IDLE提示“键错误”(KeyError),意思是字典里没有3这个键。所以同样的道理,如果访问字典元素时,不小心写错了键,也会出现同样的错误。