查找内部阵列
问题描述:
阵列特定变量我想,如果它包含一个变量“富”查找内部阵列
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
的名字?
答
如果你是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
答
您可以递归压扁你的清单,里面搜索:
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")
答
你可以遍历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
它是否必须是'FFF'或者你想检查'name'的值''在'activeSubscriptions'中的所有'dicts'? – 2014-09-02 07:56:09
它必须是'FFF'。 – 2014-09-02 09:37:23
请注意,它不是一个数组,而是一个“字典”。 – wRAR 2014-09-23 04:41:46