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

时间:2014-09-02 07:03:32

标签: python arrays

如果数组包含变量“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的名称?

3 个答案:

答案 0 :(得分:1)

如果您在productCode数组中activeSubscriptions进行搜索,那么您正在寻找:

>>> 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

答案 1 :(得分:0)

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

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")             

答案 2 :(得分:0)

你可以迭代字典数组并实现如下

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

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