Python 迭代列表并比较它';s值与dict
我正在处理1。字典列表和2。列表我正在努力:Python 迭代列表并比较它';s值与dict,python,list,python-2.7,dictionary,Python,List,Python 2.7,Dictionary,我正在处理1。字典列表和2。列表我正在努力: 1.遍历列表(列表1), 2.将列表1的值与API响应的ID匹配,如果找到-将整个dict放入新的dict中 3.否则跳过 Json格式的API响应: list_of_dict=[{"id":1500, "f_name": "alex", "age": 25 }, {"id" :1501, "f_name":"Bob", "age": 30 },
1.遍历列表(列表1),
2.将列表1的值与API响应的
ID
匹配,如果找到-将整个dict放入新的dict中
3.否则跳过
Json格式的API响应:
list_of_dict=[{"id":1500,
"f_name": "alex",
"age": 25
},
{"id" :1501,
"f_name":"Bob",
"age": 30
},
{"id" :1600,
"f_name":"Charlie",
"age": 35
}
...
]
和列表1:
list1=[1500,1501,1211.....]
据此,1500和1501
出现在dict的列表中,这样整个dict将添加到新dict中
我的尝试:
new_dict=dict()
for i,val in enumerate(list1):
#assuming val found in dict
#so put it in new dict
print i ,"=",val
new_dict.update({"id": val,"name":name, "age":age})
我看到的是这段代码只提取了列表的最后一项,并更新了dict。。但在我的例子中,新字典将包含两个id为1500
和1501
的字典。我错过了什么
list_of_dict = [{"id":1500,
"f_name": "alex",
"age": 25
},
{"id" :1501,
"f_name":"Bob",
"age" 30
},
{"id" :1600,
"f_name":"Charlie",
"age" 35
}
...
]
dicts = {d['id']:d for d in list_of_dict}
list1=[1500,1501,1211.....]
answer = [dicts[k] for k in list1 if k in dicts]
查看python内置的有用且简单的过滤器函数。它迭代一个iterable(list),只返回为所提供函数返回true的项
在这种情况下,我们的过滤功能是:
lambda x: x['id'] in list1
您可以通过简单的列表理解来实现这一点,通过DICT的id是否在列表中来过滤DICT:
result = [d for d in list_of_dict if d["id"] in list1]
如果您的list1
较大,您可能希望首先将其转换为集合
,以便更快地查找:
list1_as_set = set(list1)
result = [d for d in list_of_dict if d["id"] in list1_as_set]
假设
list1=[15001501]
(因为这两个都在dict的示例list\u
)--您希望new\u dict
在处理后是什么?我想OP希望输出是一个列表。更新操作符覆盖
list1_as_set = set(list1)
result = [d for d in list_of_dict if d["id"] in list1_as_set]