迭代dicts并在没有for循环的情况下提取值

时间:2013-10-01 19:05:45

标签: python list dictionary

从查询中我得到这些值:

[{'year': 2012L},
 {'year': 2013L},
 {'year': 2013L},
 {'year': 2013L}]

如果没有for循环,如何将所有year's值提取到数组中?

我需要获得一个列表:

[2012,2013,2013,2013] 

4 个答案:

答案 0 :(得分:4)

使用list comprehension

>>> lis = [{'year': 2012L}, {'year': 2013L}, {'year': 2013L}, {'year': 2013L}]
>>> [x['year'] for x in lis]
[2012L, 2013L, 2013L, 2013L]

答案 1 :(得分:4)

您可以使用list comprehension

>>> l = [{'year': 2012L},
...  {'year': 2013L},
...  {'year': 2013L},
...  {'year': 2013L}]  
>>> [item['year'] for item in l]
[2012L, 2013L, 2013L, 2013L]

答案 2 :(得分:2)

假设

a=[{'year': 2012L},
{'year': 2013L},
{'year': 2013L},
{'year': 2013L}]

使用while循环和pop()

   while(a):
      v=a.pop()
      print v['year']

带地图

def rv(x): return x['year']
map(rv,a)
[2012L, 2013L, 2013L, 2013L]

答案 3 :(得分:1)

operator.itemgetterlist comprehension非常适合这种情况。每次迭代也可以轻松扩展和获取多个项目(请参阅itemgetter doc)。

from operator import itemgetter

dicts = [{'year': 2012L},
         {'year': 2013L},
         {'year': 2013L},
         {'year': 2013L}]

extractor = itemgetter('year')
print [extractor(d) for d in dicts]  # [2012L, 2013L, 2013L, 2013L]