解析python3中嵌套的json / list时遇到的问题?

时间:2017-01-19 19:19:39

标签: python json python-3.x dictionary data-structures

我有一个非常大的列表alist,它有一个dict和一个嵌套列表,如下所示:

a_list = [{'A': [], 's': {'code': '0', 'credits': '0', 'msg': 'OK'}},
 {'A': [{'dictionary': 'True',
    'item': 'pineapples',
    'id': '13',
    'score': '9.7899',
    'rollup': {'True': 'OK', 'Fiz': 'Yes'},
    'variant_list': [{'endp': '8', 'form': 'pineapple', 'register': '0'}]}], 'status': {'codecheck': '0', 'cred': '90809890', 'msg': 'OK'}},
......

{'A': [], 's': {'code': '0', 'credits': '0', 'msg': 'OK'}},
    ]

当且仅当存在于以下列表中时,如何提取item参数的摘录:

['NaN', 'pineapples', 'NaN']

我不明白如何解析它,因为它有一个非常嵌套的结构,我正在努力解决的主要问题是访问列表的每个元素然后到另一个列表并留下NaN字符串。

1 个答案:

答案 0 :(得分:1)

使用以下方法( list comprehension ):

a_list = [{'A': [], 's': {'code': '0', 'credits': '0', 'msg': 'OK'}},
          {'A': [{'dictionary': 'True',
                  'item': 'pineapples',
                  'id': '13',
                  'score': '9.7899',
                  'rollup': {'True': 'OK', 'Fiz': 'Yes'},
                  'variant_list': [{'endp': '8', 'form': 'pineapple', 'register': '0'}]}],
           'status': {'codecheck': '0', 'cred': '90809890', 'msg': 'OK'}},
          {'A': [], 's': {'code': '0', 'credits': '0', 'msg': 'OK'}},
          ]

result = ['NaN' if not len(o['A']) else o['A'][0]['item'] for o in a_list]
print(result)

输出:

['NaN', 'pineapples', 'NaN']
  

列表推导提供了创建列表的简明方法。共同   应用程序将创建新列表,其中每个元素都是结果   一些操作应用于另一个序列的每个成员或   可迭代的,或创建满足a的元素的子序列   某种条件。

某种情况,在您的情况下,是'NaN' if not len(o['A']) else o['A'][0]['item']

https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions