【问题标题】:return all json objects containing specific keyword using python使用python返回所有包含特定关键字的json对象
【发布时间】:2023-03-15 19:00:06
【问题描述】:

我希望返回所有包含特定关键字的 json 对象。

DATA = [
    {
        "candidateName" : "Jack",
        "candidateEmail" : "Jack@gmail.com",
        "candidateSkills" : ["machine learning", "Artificial Intelligence"]
    },
    {
        "candidateName" : "John",
        "candidateEmail" : "John@gmail.com",
        "candidateSkills" : ["python", "machine learning"]
    },
    {
        "candidateName" : "Smith",
        "candidateEmail" : "Smith@gmail.com",
        "candidateSkills" : ["python"]
    }
]

如果我想使用python返回上述json文件中包含“python”的所有对象,该怎么做?

我已经尝试过的是=>

**def result():
              with open(DATA.json) as jsondata:
              data = json.loads(jsondata)
              return (list(filter(lambda x:x["candidateName"].find("python"), data)))**

我得到的输出是空的。

【问题讨论】:

  • 你为什么看candidateName键而不是candidateSkills

标签: python json python-3.x dictionary


【解决方案1】:

嗯...你找错地方了。看candidateSkills

newData = [obj for obj in DATA if "python" in obj['candidateSkills']]

输出

[{'candidateName': 'John', 'candidateEmail': 'John@gmail.com', 'candidateSkills': ['python', 'machine learning']}, 
 {'candidateName': 'Smith', 'candidateEmail': 'Smith@gmail.com', 'candidateSkills': ['python']}]

【讨论】:

  • 感谢@BuddyBob 它正在工作,我想知道我是否需要返回所有带有多个关键字的对象,比如我想要“python”、“机器学习”两者一起。我该怎么做?
  • if ["python","machine learning"] in obj['candidateSkills']]
【解决方案2】:
import json

def result():
    with open("DATA.json") as jsondata:
        data = json.load(jsondata)
    return([candidate for candidate in data if "python" in candidate["candidateSkills"]])

result()

我会这样做。

它将返回python在candidateSkills中的所有字典的列表。

【讨论】:

  • 谢谢!它正在工作,我想知道我是否想一起搜索“python”和“人工智能”之类的两个值。在这种情况下,我应该如何继续获取包含上述关键字的所有不同对象。
【解决方案3】:

这可能会对你有所帮助。

import json

with open("sample.json") as jsondata:
    data = json.loads(jsondata.read())


skill_list = ["machine learning"]
def check_all_skills(words, skills):
    for word in words:
        if word in skills:
            return True
    return False


result = [element for element in data["DATA"] if check_all_skills(skill_list, element["candidateSkills"])]
print("Result: ", result)

输出:

Result: 
[{
    'candidateName': 'Jack',
    'candidateEmail': 'Jack@gmail.com',
    'candidateSkills': ['machine learning', 'Artificial Intelligence']
}, {
    'candidateName': 'John',
    'candidateEmail': 'John@gmail.com',
    'candidateSkills': ['python', 'machine learning']
}]

【讨论】:

  • 谢谢!它正在工作,可能是我之前对上述两个回复的评论没有得到很好的解释。但我真正想要的是我想要来自 json 的所有那些包含这些特定关键字的对象。就像在你的帖子中一样 Skill_list = ["python", "Artificial Intelligence"] - 都来自不同的对象,所以我想在我的输出中返回这两个对象。
  • 编辑代码以匹配列表中的任何技能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 2017-06-07
  • 2020-07-16
  • 1970-01-01
相关资源
最近更新 更多