我担心这个问题有点令人费解。我在api上写了一个函数测试,当我查询它时,返回一堆带有嵌入式列表的json。这是一个重要的片段(看起来像这个问题匿名的所有数据):
[{u'account': {u'account_name': u'Autotest Account',
u'account_uid': u'000000000'},
u'address': {u'city': u'AutoTest City',
u'country': u'United States',
u'postal_code': u'10019',
u'province': None,
u'state': u'IL',
u'street': [u'12 Auto Road']},
u'children': [{u'institution_name': u'Autotest Bottom Institution 1',
u'institution_type': 1,
u'institution_uid': u'111111111'},
{u'institution_name': u'Autotest Bottom Institution 2',
u'institution_type': 1,
u'institution_uid': u'222222222'},
{u'institution_name': u'Autotest Bottom Institution 3',
u'institution_type': 1,
u'institution_uid': u'333333333'},
{u'institution_name': u'Autotest Bottom Institution 4',
u'institution_type': 1,
u'institution_uid': u'444444444'},
{u'institution_name': u'Autotest Bottom Institution 5',
u'institution_type': 1,
u'institution_uid': u'555555555'},
{u'institution_name': u'Autotest Bottom Institution 6',
u'institution_type': 1,
u'institution_uid': u'666666666'},
{u'institution_name': u'Autotest Bottom Institution 7',
u'institution_type': 1,
u'institution_uid': u'777777777'},
{u'institution_name': u'Autotest Bottom Institution 8',
u'institution_type': 1,
u'institution_uid': u'888888888'}],
u'institution_name': u'Autotest Middle Institution 1',
u'institution_type': 2,
u'institution_uid': u'000000001',
u'parent': {u'institution_name': u'Autotest Top Institution',
u'institution_type': 3,
u'institution_uid': u'000000099'},
u'school_year': 2011},
{u'account': {u'account_name': u'Autotest Account',
u'account_uid': u'000000000'},
u'address': {u'city': u'Bacon City',
u'country': u'United States',
u'postal_code': u'10018',
u'province': None,
u'state': u'IL',
u'street': [u'15 Wonder Road']},
u'children': [],
u'institution_name': u'Autotest Bottom Institution 1',
u'institution_type': 1,
u'institution_uid': u'111111111',
u'parent': {u'institution_name': u'Autotest Middle Institution 1',
u'institution_type': 2,
u'institution_uid': u'000000001'},
u'school_year': 2011}]
我想要完成的是从JSON中提取所有“Bottom Institution”名称,并将它们放入一个列表中,然后我可以将其与已经在我的测试夹具数据中的列表进行比较。看起来应该是这样的:
['Autotest Bottom Institution 1','Autotest Bottom Institution 2','Autotest Bottom Institution 3','Autotest Bottom Institution 4','Autotest Bottom Institution 5','Autotest Bottom Institution 6','Autotest Bottom Institution 7','Autotest Bottom Institution 8']
在将数据加载到“inst_array”后,我可以一次一个地或通过迭代提取它们,如下所示:
>>> print inst_array[0]['children'][0]['institution_name']
Autotest Bottom Institution 1
>>> print inst_array[0]['children'][1]['institution_name']
Autotest Bottom Institution 2
>>> print inst_array[0]['children'][2]['institution_name']
Autotest Bottom Institution 3
但是这里是踢球者:我希望能够在没有迭代的情况下做到这一点(或者尽可能少地进行迭代),并且因为在这里嵌套了无数层,所以让我感到困惑。
有什么想法吗?
答案 0 :(得分:5)
不应该这样的工作吗?
names = [child['institution_name'] for child in inst_array[0]['children']]
答案 1 :(得分:1)
我猜列表理解仍然是一种迭代形式,但至少简洁:
your_list = [elem['institution_name'] for elem in inst_array[0]['children']]
答案 2 :(得分:0)
不确定“没有迭代”是什么意思。无论你在这里做什么,都必须按照定义迭代列表。
无论如何,这是一次尝试:
institutions = set()
for account in data:
for child in account['children']:
institutions.add(child['institution_name'])
答案 3 :(得分:0)
我不确定你对“没有迭代”的意思是什么,但这里有隐含的迭代可以起作用的东西:
[x['institution_name'] for x in inst_array[0]['children'] if x['institution_name']]
答案 4 :(得分:0)
类似的东西:
[ x['institution_name'] for x in inst_array[0]['children'] ]