2014-09-02 59 views
1

陣列特定變量我想,如果它包含一個變量「富」查找內部陣列

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'的值''在'activeSubscriptions'中的所有'dicts'? – 2014-09-02 07:56:09

+0

它必須是'FFF'。 – 2014-09-02 09:37:23

+0

請注意,它不是一個數組,而是一個「字典」。 – wRAR 2014-09-23 04:41:46

回答

1

如果你是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 
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")    
0

你可以遍歷dictonary的陣列和acheive像下面

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

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