Python列表生成式和字典生成式实例
作者:程序员的战歌
这篇文章主要介绍了Python列表生成式和字典生成式实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
列表生成式
格式
[ x for x in 可迭代对象] [ x for x in 可迭代对象 if 条件]
1. 把要生成的元素 x 放到前面,执行的时候,先执行后面的for循环。
2. 后面跟上for循环,可以有多个for循环,也可以在for循环后面再加个if条件。
3. for循环后面可以是任何方式的迭代器(元组/列表/生成器..),只要可迭代对象的元素中至少有一个值。
例1:最简单的
In [1]: [x for x in 'abcd'] Out[1]: ['a', 'b', 'c', 'd']
例2:加if判断
In [1]: res = [10,11,12,13] In [2]: [x for x in res if x > 10] Out[2]: [11, 12, 13] 原生实现: In [1]: arr = [] In [2]: for x in res: ....: if x > 10: ....: arr.append(x) ....: In [3]: arr Out[3]: [11, 12, 13]
例3:迭代字典生成列表
print [v for k,v in {'a':'one','b':'two'}.items()] 输出:['one', 'two'] print [(k,v) for k,v in {'a':'one','b':'two'}.items()] 输出:[('a', 'one'), ('b', 'two')] print [k+'='+v for k,v in {'name':'lyz','age':'26','job':'IT'}.items()] 输出:['job=IT', 'age=26', 'name=lyz']
字典生成式
格式
1. 在Python2.6或更早的版本,字典生成器可以接受迭代的键/值对。
d = dict((key, value) for (key, value) in iterable)
说明:
第一个k,v的()必须写,第二个()可不写。
2.6版本就是利用dict()函数,函数的参数是一个嵌套的序列,序列的元素是元组。
2. 从Python2.7或者3以后,你可以直接用字典推导式语法。
d = {key: value for (key, value) in iterable} # k,v的()可以不写
3. python2.7以上兼容两种写法,python2.6只能用第一种。
4. 可以用任何方式的迭代器(元组,列表,生成器..),只要可迭代对象的元素中有两个值。
python2.7写法
dict1 = {'one':1,'two':2,'three':3} dict2 = {v:k for k,v in dict1.items()} print dict2 输出: {1: 'one', 2: 'two', 3: 'three'}
python2.6写法
dict1 = {'one':1,'two':2,'three':3} dict3 = dict((v,k) for k,v in dict1.items()) print dict3 输出: {1: 'one', 2: 'two', 3: 'three'}
例1:两种生成式方式生成字典
In [1]: arr=['wd','18','nan'] In [2]: dict((k,v) for k,v in enumerate(arr)) Out[2]: {0: 'wd', 1: '18', 2: 'nan'} In [3]: {k:v for k,v in enumerate(arr)} Out[3]: {0: 'wd', 1: '18', 2: 'nan'}
例2:线上实例
arr = [{'id':1,'name':'lyz','age':26},{'id':2,'name':'pc','age':30}] print {str(x['id']):x['name'] for x in arr} 执行结果: {'1': 'lyz', '2': 'pc'}
其他生成字典的方法
1. dict()函数
嵌套元组和嵌套类别可以直接通过dict命令转为字典(嵌套内部的元素只能是2个)
>>> a = [(1, 'ab'), (2, 'bc')] >>> dict(a) {1: 'ab', 2: 'bc'} >>> result = ((1, 'ab'), (2, 'bc')) >>> dict(result) {1: 'ab', 2: 'bc'}
2. zip()函数
将多个元组或列表合并,合并规则是每个元组元素个数一致
In [1]: zip(('name','age','sex'),('wd','18','nan')) Out[1]: [('name', 'wd'), ('age', '18'), ('sex', 'nan')] In [2]: zip(['name','age','sex'],['wd','18','nan']) Out[2]: [('name', 'wd'), ('age', '18'), ('sex', 'nan')] In [3]: dict(zip(('name','age','sex'),('wd','18','nan'))) # 生产环境最常用 Out[3]: {'age': '18', 'name': 'wd', 'sex': 'nan'} In [4]: zip(['name','age','sex'],['wd','18','nan'],['11',22]) # 列表元素个数不一致,以最少对列表为准 Out[4]: [('name', 'wd', '11'), ('age', '18', 22)]
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。