在数组内部的数组中查找特定变量

2024-06-25 06:58:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想搜索一个数组,如果它包含一个变量“Foo”

details={u'firstName': u'Test', u'activeSubscriptions': [{u'productCode': u'BBB', u'name': u'Bar'}, {u'productCode': u'FFF', u'name': u'Foo'}

我是这样做的:

subscriptions_name = data['activeSubscriptions'][0]['name']

但这只适用于数组中的第一个数据。你知道吗

如果数据放置不一致,我如何获得FFF的名称?你知道吗


Tags: 数据nametest名称datafoofffsubscriptions
3条回答

如果按productCodeactiveSubscriptions数组中进行搜索,则要查找以下内容:

>>> details={'firstName': 'Test', 'activeSubscriptions': [{'productCode': 'BBB', 'name': 'Bar'}, {'productCode': 'FFF', 'name': 'Foo'}]}
>>> product_code_search_key = 'FFF'
>>> for subscription in details['activeSubscriptions']:        
...     if subscription and subscription.get('productCode','') and subscription['productCode'] == product_code_search_key:
...         print subscription['name']
...         break
... 
>>> Foo

你可以像下面这样迭代口述和切记的数组

details={'firstName': 'Test', 'activeSubscriptions': [{'productCode': 'BBB', 'name': 'Bar'}, {'productCode': 'FFF', 'name': 'Foo'}]}

for i in details['activeSubscriptions']:        
    if 'Foo' in i.values():
        print i

您可以递归地展平列表并在其中搜索:

def flatten(l):
    res = []
    for e in l:
        if type(e) is dict:
            tmp = e.values()
            res += flatten(tmp)
         elif type(e) is list:
             tmp = e[:]
             res += flatten(tmp)
         else:
             res += e
    return res

if "Foo" in flatten(list)

编辑:出于性能考虑,不需要计算数组并在其中搜索。以下是仅在数组中搜索的版本:

def is_in_superlist(l, m):
    for e in l:
        if type(e) is dict:
            return is_in_superlist(e.values(), m)
         elif type(e) is list:
             return is_in_superlist(e, m)
         else:
             if e == m:
                 return True
    return False

is_in_superlist(list, "Foo")             

相关问题 更多 >