我如何用关键字在json文件中搜索特定行?

问题描述 投票:1回答:6

我想知道如何搜索具有特定名称的行。这是我的带有json的.txt文件:

{"people": [{"name": "Scott", "website": "stackabuse.com", "from": "Nebraska"}, {"name": "Larry", "website": "google.com", "from": "Michigan"}, {"name": "Tim", "website": "apple.com", "from": "Alabama"}]}

这是我的代码

import json

file = open('data.txt', "r")
read = file.read()
y = json.loads(read)

first = y["people"][0]
second = y["people"][1]
third = y["people"][2]

print(y["people"][0]["name"])

这会打印出Scott,但是有没有办法在json文件中搜索名称为Scott的行?香港专业教育学院尝试print(y [“ people”] [“ name”:“ Scott”]),但是没有用。我希望输出为{“ name”:“ Scott”,“ website”:“ stackabuse.com”,“ from”:“ Nebraska”}

python json search keyword
6个回答
3
投票

您可以使用list comprehension来过滤列表。例如

>>> people = y['people']
>>> people_named_scott = [p for p in people if p['name'] == 'Scott']
>>> people_named_scott
[{'name': 'Scott', 'website': 'stackabuse.com', 'from': 'Nebraska'}]

1
投票

您可以在列表中存储姓名为Scott的个人信息。

Python代码:

import json

file = open('data.txt', "r")
read = file.read()
y = json.loads(read)
people = y["people"]
lines = [person for person in people if person["name"] == "Scott"]
for line in lines:
    print(line)

data.txt

{"people": [{"name": "Scott", "website": "stackabuse.com", "from": "Nebraska"}, {"name": "Larry", "website": "google.com", "from": "Michigan"}, {"name": "Tim", "website": "apple.com", "from": "Alabama"}]}

输出:

{'name': 'Scott', 'website': 'stackabuse.com', 'from': 'Nebraska'}

0
投票

如果您始终需要按名称搜索,并且名称是唯一的,则可以使用简单的dict理解来在名称和完整对象之间创建映射,如下所示:

y = {"people": [{"name": "Scott", "website": "stackabuse.com", "from": "Nebraska"}, {"name": "Larry", "website": "google.com", "from": "Michigan"}, {"name": "Tim", "website": "apple.com", "from": "Alabama"}]}
new_y = {inner["name"]: inner for inner in y["people"]}
print(new_y["Scott"])

输出:

{'name': 'Scott', 'website': 'stackabuse.com', 'from': 'Nebraska'}

0
投票

我建议使用jmespath(https://pypi.org/project/jmespath/


0
投票

如果我正确理解您,您正在尝试打印名称为Scott的json列表。

print([jobj if jobj['name']=='Scott' for jobj in y['people']])

0
投票

您可以执行类似的操作,在其中迭代所有人,然后返回具有匹配名称的第一个人。

def getPersonByName(allInfo, name):
    for info in allInfo["people"]:
        if info["name"] == name:
            return info

allInfo = {"people": [{"name": "Scott", "website": "stackabuse.com", "from": "Nebraska"}, {"name": "Larry", "website": "google.com", "from": "Michigan"}, {"name": "Tim", "website": "apple.com", "from": "Alabama"}]}

print(getPersonByName(allInfo, "Scott"))
© www.soinside.com 2019 - 2024. All rights reserved.