是否可以为特定的键值过滤数组并为该键返回值?
我有以下数组:
[
{
"action_type": "landing_page_view",
"value": "72"
},
{
"action_type": "link_click",
"value": "6"
}
]
如果该action_type不存在,如何获取action_type: link_click
的值并返回0?
编辑:我想避免大循环。
答案 0 :(得分:2)
当然,您可以使用filter内置函数。
它需要一个lambda函数。在这种情况下,就像
lambda x: x['action_type'] == "link_click"
并将结果转换为列表:
dt = [{'action_type': 'landing_page_view', 'value': '72'},
{'action_type': 'link_click', 'value': '6'}]
list (filter (lambda x: x['action_type'] == "link_click", dt))
# Returns [{'action_type': 'link_click', 'value': '6'}]
如果未找到任何内容,它将返回一个空列表。
如果什么都没找到,则返回0很简单。
# data - the input data
# key - the key to search
# val - the value to compare with
# key2 - the key whose value should be returned in case of a match
def flt (data, key, val, key2):
found = list (filter (lambda x: x[key] == val, data))
if found:
return found[0][key2]
return 0
并建议使用next
函数,如@ alain-t一样,使它更加时尚。
def flt (data, key, val, key2):
return next (filter (lambda x: x[key] == val, data), {key2: 0})[key2]
答案 1 :(得分:1)
您可以使用next()函数:
Directory
答案 2 :(得分:0)
是的,您可以使用list comprehension来实现:
def filter_function(l):
result = [ item["value"] for item in l if item["action_type"] == "landing_page_view"]
if len(result) > 0:
return result
else:
return 0
l = [
{
"action_type": "landing_page_view",
"value": "72"
},
{
"action_type": "link_click",
"value": "6"
}
]
print(filter_function(l))
答案 3 :(得分:0)
x=[
{
"action_type": "landing_page_view",
"value": "72"
},
{
"action_type": "link_click",
"value": "6"
}
]
res = list(filter(lambda x: x['action_type']=='link_click',x))
sol = list(map(lambda x:x['value'], res))
if sol==[]:
print(0)
else:
print(sol)
# output ['6']