如果存在键或默认值,则过滤数组并返回值

时间:2019-04-30 21:02:10

标签: python

是否可以为特定的键值过滤数组并为该键返回值?

我有以下数组:

[
    {
        "action_type": "landing_page_view",
        "value": "72"
    },
    {
        "action_type": "link_click",
        "value": "6"
    }        
]

如果该action_type不存在,如何获取action_type: link_click的值并返回0?

编辑:我想避免大循环。

4 个答案:

答案 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']