我有一个字典列表,我想获取列表中两个键的列表。这是我现在的做法:
l_id = [d['id1'] for d in l_data]
l_id.extend([d['id2'] for d in l_data])
有没有一种Pythonic的方法,可以一次完成列表推导并获得相同的结果?(id顺序无关紧要)
我有一个字典列表,我想获取列表中两个键的列表。这是我现在的做法:
l_id = [d['id1'] for d in l_data]
l_id.extend([d['id2'] for d in l_data])
您好
l_id = [d[key] for key in ['id1', 'id2'] for d in l_data]
if key in d
来确保不会出现 KeyError。 - Julien Spronck您可以在每次迭代中遍历字典项,并检查键是否为id1
或id2
,然后保留值:
[j for d in l_data for i,j in d.items() if i=='id1' or i=='id2']
operator.itemgetter
和 map
函数:>>> data = [ {'id1':1, 'col1':'va1', 'id2':1001}, {'id1':2, 'col1':'va2', 'id2':1002}]
>>> map(itemgetter('id1','id2'),data)
[(1, 1001), (2, 1002)]
itemgetter
的结果,正如我所说的,这是另一种答案! - Mazdakl_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 ]
if k in d
)。