合并多个列表推导

时间:2015-05-08 12:22:18

标签: python list-comprehension

我有一个词典列表,我想获得列表中2个键的列表。我现在就是这样做的:

l_id = [d['id1'] for d in l_data]
l_id.extend([d['id2'] for d in l_data])

是否有一种pythonic方式来完成列表理解并获得相同的结果? (id顺序无关紧要)

3 个答案:

答案 0 :(得分:3)

您可以在每次迭代中迭代字典项,并检查密钥是id1还是id2,然后保留值:

[j for d in l_data for i,j in d.items() if i=='id1' or i=='id2']

作为替代方式,您还可以将operator.itemgettermap函数一起使用:

>>> data = [ {'id1':1, 'col1':'va1', 'id2':1001}, {'id1':2, 'col1':'va2', 'id2':1002}]
>>> map(itemgetter('id1','id2'),data)
[(1, 1001), (2, 1002)]

答案 1 :(得分:1)

l_id = [d[key] for key in ('id1', 'id2') for d in l_data]

答案 2 :(得分:1)

如果您想要键id1的所有值,后跟键id2的所有值,您可以这样做:

l_id = [ d[k] for k in ["id1", "id2"] for d in l_data if k in d ]

如果您已经知道每个字典都包含您需要的所有ID,则可以跳过测试(if k in d)。