如果数组包含变量“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 :(得分: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