背景:
我有以下
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'}]