dist 类型
Python的 dict 就是专门干这件事的。用 dict 表示“名字”-“成绩”的查找表如下:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
表示形式很像数组,花括号表示这是一个dict,然后按照key:value依次写,最后一个键值对的‘,’可以省略。
dict也是一个集合,所以可以用len()的形式查询集合内.
可以简单地使用 d[key] 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key:
>>> print d['Adam'] 95 >>> print d['Paul'] Traceback (most recent call last): File "index.py", line 11, in <module> print d['Paul'] KeyError: 'Paul'
注意: 通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。
要避免 KeyError 发生,有两个办法:
一是先判断一下 key 是否存在,用 in 操作符:
if 'Paul' in d: print d['Paul']
如果 'Paul' 不存在,if语句判断为False,自然不会执行 print d['Paul'] ,从而避免了错误。
另,dict本身提供一个get方法,在key不存在的时候返回none. : print(d.get(key)) .
dict的第一个特点是查找速度快,无用论是10个元素还是10万个元素,查找速度都一样。List是伴随数量增加查找时间变长。代价是占用内存。
第二个特点是存储的k-v键值对,是没有顺序的。不同打印机打印出来的顺序都会不同,这说明dict的内部是无序的,所以不能用dict存有序集合。
第三个特点是key的元素是不可变的。不可变的都可以作为key,像list这样的就不行。
可以直接用d[key]的形式直接给dict赋值,或者重写某个key的value。
set类型
set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。会自动去掉重复的值。
所以,访问 set中的某个元素实际上就是判断一个元素是否在set中。
s = set(['Adam', 'Lisa', 'Bart', 'Paul'])
>>> 'Bart' in s True
>>> 'Bill' in s False
说明set中区分大小写。
请用 for 循环遍历如下的set,打印出 name: score 来。
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
-
注意到set的元素是tuple,因此 for 循环的变量被依次赋值为tuple。
参考代码:
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)]) for x in s: print x[0] + ':', x[1]