-
我们可以用 in 操作符判断set中的元素:
Bart是该班的同学吗?
>>> 'Bart' in s True
查看全部 -
set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。
创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素:
>>> s = set(['A', 'B', 'C'])
查看全部 -
直接使用for循环可以遍历 dict 的 key:
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } >>> for key in d: ... print key
查看全部 -
要把新同学'Paul'的成绩 72 加进去,用赋值语句:
>>> d['Paul'] = 72
查看全部 -
dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。
dict内部是无序的,不能用dict存储有序的集合。
dict的第三个特点是作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key。
查看全部 -
set特点及应用:
set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
最后,set存储的元素也是没有顺序的。
应用:处理比较多的简单判断时,可以用set。
比如,判断用户输入是否有效(周一到周日),可以直接设定一个包含周一到周日的set,然后直接判断用户输入是否在set即可。这样省去了判断语句的繁琐。
查看全部 -
可以简单地使用 d[key] 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key
要避免 KeyError 发生,有两个办法:
一是先判断一下 key 是否存在,用 in 操作符:
if 'Paul' in d: print d['Paul']
如果 'Paul' 不存在,if语句判断为False,自然不会执行 print d['Paul'] ,从而避免了错误。
二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:
>>> print d.get('Bart') 59 >>> print d.get('Paul') None
查看全部 -
Python的 dict 就是专门干这件事的。用 dict 表示“名字”-“成绩”的查找表如下:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
我们把名字称为key,对应的成绩称为value,dict就是通过 key 来查找 value。
花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。
由于dict也是集合,len() 函数可以计算任意集合的大小:
>>> len(d) 3
注意: 一个 key-value 算一个,因此,dict大小为3。
查看全部 -
dict的特点:
查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
存储的key-value序对是没有顺序的!这和list不一样,不能用dict存储有序的集合。
dict的第三个特点是作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key;不可变这个限制仅作用于key,value是否可变无所谓;
而它本身是可变的,即可以增减序对:用d[key] = value这个赋值语句可以新增序对,如果key存在,则会把新的value赋值给原来的key
查看全部 -
二者之间关系(eg.姓名:成绩)的列表——dict:
d = {
key:value,
`````````
}
可以简单地使用 d[key] 的形式来查找对应的 value;如果key不存在,直接使用d[key] 的形式就会报错,这时就可以采用d.get(key)的形式,就会返回None值,不报错。
查看全部 -
def toUppers(L):
return [x.upper() for x in L if isinstance(x,str)]
print toUppers(['Hello', 'world', 101])
查看全部 -
列表生成式的 for 循环后面还可以加上 if 判断。例如:
>>> [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选:
>>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100]
有了 if 条件,只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中。
列表生成式的 for 循环后面还可以加上 if 判断。例如:
>>> [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选:
>>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100]
有了 if 条件,只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中。
查看全部 -
在生成的表格中,对于没有及格的同学,请把分数标记为红色。
提示:红色可以用 <td > 实现。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
def generate_tr(name, score):
if score>=60:
return '<tr><td>%s</td><td>%s</td></tr>' % (name, score)
else:
return '<tr><td>%s</td><td >%s</td ></tr>' % (name, score)
tds = [generate_tr(name, score) for name, score in d.iteritems()]
print '<table border="1">'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'
查看全部 -
请根据dict:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
打印出 name : score,最后再打印出平均分 average : score。
需要同时对 name 和 score 进行迭代。
参考代码:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 } sum = 0.0 for k, v in d.iteritems()/d.items(): sum = sum + v print k, ':', v print 'average', ':', sum / len(d)
查看全部 -
values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } print d.values() # [85, 95, 59]for v in d.values(): print v# 85# 95# 59
如果仔细阅读Python的文档,还可以发现,dict除了values()方法外,还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } print d.itervalues() # <dictionary-valueiterator object at 0x106adbb50>for v in d.itervalues(): print v # 85 # 95 # 59
那这两个方法有何不同之处呢?
1. values() 方法实际上把一个 dict 转换成了包含 value 的list。
2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
3. 打印 itervalues() 发现它返回一个 <dictionary-valueiterator> 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
查看全部
举报