2014-09-02 2 views
1

Я хочу искать массив, если он содержит переменную «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, если данные не размещены последовательно?

+0

Должно ли это быть 'FFF' или вы хотите проверить значение' name' для всех 'dicts' в' activeSubscriptions'? –

+0

Это должно быть 'FFF'. –

+0

Обратите внимание, что это не массив, а 'dict'. – wRAR

ответ

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

Edit: причина производительности, нет необходимости, чтобы вычислить массив и поиск внутри него. После версии, только поиск внутри массива:

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")    
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 
Смежные вопросы