如何选择具有特定值的特定JSON对象?

2024-04-26 19:02:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在里面有多个字典的列表(作为JSON),我有一个值的列表,基于这个值,我想要JSON对象作为那个特定值。例如

[{'content_type': 'Press Release',
  'content_id': '1',
   'Author':John},
{'content_type': 'editorial',
  'content_id': '2',
   'Author': Harry
},
{'content_type': 'Article',
  'content_id': '3',
   'Author':Paul}]

我想取一个完整的对象,作者是保罗。 这是我迄今为止所做的代码。在

^{pr2}$

如果需要其他信息,请询问。在


Tags: 对象idjson列表release字典typearticle
2条回答

案例1
一次性访问

完全可以读取数据并对其进行迭代,返回找到的第一个匹配项。在

def access(f, author):
    with open(file) as f:
        data = json.load(f)

    for d in data:
        if d['Author'] == author:
            return d
    else:
        return 'Not Found'

案例2
重复访问

在这种情况下,最好能以这样一种方式重塑数据:通过作者姓名访问对象要快得多(想想字典!)。在

例如,一个可能的选择是:

^{pr2}$

现在,定义一个函数并传递预加载的数据和作者名列表。在

def access(myData, author_list):
    for a in author_list:
        yield myData.get(a)

函数的调用方式如下:

for i in access(newData, ['Paul', 'John', ...]):
    print(i)

或者,将结果存储在一个列表rlist(...)是必需的,因为yield返回一个生成器对象,您必须通过迭代来耗尽它。在

r = list(access(newData, [...]))

为什么不这样做呢?它应该很快,你将不必加载的作者,不会被搜索。在

alreadyknown = {}
list_of_obj = [{'content_type': 'Press Release',
    'content_id': '1',
    'Author':'John'},
    {'content_type': 'editorial',
    'content_id': '2',
    'Author': 'Harry'
    },
    {'content_type': 'Article',
    'content_id': '3',
    'Author':'Paul'}]
def func(author):
    if author not in alreadyknown:
        obj = get_obj(author)
        alreadyknown[author] = obj
    return alreadyknown[author]
def get_obj(auth):
    return [obj for obj in list_of_obj if obj['Author'] is auth]
print(func('Paul'))

相关问题 更多 >