[英]Accessing json key, value with python by key not index
我有下面显示的JSON文件。 我对编程非常陌生,经过反复试验,我能够按文件中的索引访问单个键值,如下面的代码所示。 我希望能够通过键搜索多个对象。 例如,我想通过键“ vedette”进行搜索,并返回“ academieFrançaise”,“ Quai conti”,“ Institut”,“ Les quarante”。 关于如何做到这一点的任何建议都将是很棒的。
with open('DESformatted.json') as data_file:
d = json.load(data_file)
pprint (d['DES'][0]['vedette'])
[u'Acad\xe9mie fran\xe7aise']
{
"DES": [
{
"vedette": ["Académie française"],
"synonymes": [
"Institut",
"Quai Conti",
"les Quarante"
],
"liste10": [
"Institut",
"66",
"Quai Conti",
"66",
"les Quarante",
"66"
],
"cliques": [
[
"Académie française",
"Institut"
],
[
"Académie française",
"Quai Conti"
],
[
"Académie française",
"les Quarante"
]
]
},
{
"vedette": ["Quai Conti"],
"synonymes": [
"Académie française"
],
"liste10": [
"Académie française",
"200"
],
"cliques": [
[
"Académie française",
"Quai Conti"
]
]
},
{
"vedette": ["les Quarante"],
"synonymes": [
"Académie française"
],
"liste10": [
"Académie française",
"200"
],
"cliques": [
[
"Académie française",
"les Quarante"
]
]
},
{
"vedette": ["Institut"],
"synonymes": [
"Académie française",
"académie"
],
"liste10": [
"Académie française",
"100",
"académie",
"100"
],
"cliques": [
[
"Académie française",
"Institut"
],
[
"Institut",
"académie"
]
]
}
]
}
与"DES"
关联的值是一个对象列表,因此您可以像这样遍历它们:
for obj in d["DES"]:
print(obj["vedette"])
输出:
['Acad\xe9mie fran\xe7aise']
['Quai Conti']
['les Quarante']
['Institut']
您可以执行以下操作:
>>> vedettes = []
>>> for x in d['DES']:
vedettes += x['vedette']
>>> vedettes
['Acad\xc3\xa9mie fran\xc3\xa7aise', 'Quai Conti', 'les Quarante', 'Institut']
在这里,我遍历字典d
DES
键中的所有值。 然后,我将从每次迭代获得的vedette
值存储到vedettes
列表中。 这是通过添加获得的vedette
列表和vedettes
列表来完成的,以便将在每个步骤中获得的vedette
列表的所有元素都添加到最终的vedettes
列表中。
vedettes
列表包含您想要的输出。
作为其他人提出的正确的for
循环的替代方法,您可以使用list comprehension 。
>>> import json
>>> d = json.load(open('DESformatted.json'))
>>> [x['vedette'] for x in d['DES']]
[[u'Acad\xe9mie fran\xe7aise'], [u'Quai Conti'], [u'les Quarante'], [u'Institut']]
>>>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.