合并多个列表理解

Merge multiple list comprehensions

我有一个字典列表,我想获取列表中 2 个键的列表。这是我现在的做法:

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

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

您可以在每次迭代中遍历字典项目并检查键是 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)]

怎么样

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

如果您想要键 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)。