python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python列表生成式和字典生成式

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)]

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文