python – 循环遍历iterable并仅保留相关元素

背景:

我有以下
python 3

data = [{'name': 'Jon','id_str': '01'},{'name': 'Tom','id_str': '02'}, {'name': 'Jim','id_str': '03'}] 
id = ['01','1133', '02', '2222']

目标:在id == id_str时保留数据并附加到列表中.

下面的代码附加了第一个数据点[{‘id_str’:’01’,’name’:’Jon’}](这就是我想要的)

id_list = [] 
for d in range(len(data)):
    t = data[d]          
    id_str = t['id_str']       

    if id_str == id[d]: 
        keep = data[d]  
        id_list.append(keep)

问题:现在我想转到列表’1133’中的下一个id.但由于第二个id值’1133’不等于数据中第二个值的id_str({‘name’:’Tom’,’id_str’:’02’},我希望它跳过这个并转到id中的第三个值为’02’.由于id(’02’)等于id_str({‘name’:’Tom’,’id_str’:’02’}),我想追加.

我想继续这个过程并循环,直到检查了所有id = [’01’,’1133′,’02’,’2222′].这个网站http://love-python.blogspot.com/2012/03/get-next-element-from-list-in-python.html.建议我应该在某个时候添加一个计数器,以及if-else语句,但我已经尝试了很多次,我不知道如何.

我猜我的最终代码看起来像下面这样

id_list = [] 
for d in range(len(data)):
    t = data[d]          
    id_str = t['id_str']       

    if id_str == id[d]: 
        keep = data[d]  
        id_list.append(keep)

    elif id_str != id_list[d]: 
         skip 
         check next id
    else:
         if no more id to check
         break

期望的最终输出:

[{'name': 'Jon','id_str': '01'},{'name': 'Tom','id_str': '02'}] 

问题:我如何实现这些目标:

1)保留并附加所需的数据(当id == id_str时)

2)跳过不需要的数据(当id!= id_str时)

3)完成骑行通过id后休息
(也就是说,一旦id = [’01’,’1133′,’02’,’2222′]中的所有元素都被索引并与数据中的所有id_str进行比较)

最佳答案 这是使用列表理解的一种方式.

data = [{'name': 'Jon','id_str': '01'},{'name': 'Tom','id_str': '02'}, {'name': 'Jim','id_str': '03'}] 
ids = ['01','1133', '02', '2222']

res = [d for d in data if d['id_str'] in ids]

# [{'id_str': '01', 'name': 'Jon'}, {'id_str': '02', 'name': 'Tom'}]
点赞