【问题标题】:Python - check if variable is == to json element and printPython - 检查变量是否 == 到 json 元素并打印
【发布时间】:2017-01-21 00:48:41
【问题描述】:

我有一个包含数千个学生信息位的 json 响应。它看起来像这样:

{
"users": [
    {
        "agents": [
            {
                "href": "private url here",
                "sourcedId": "g560",
                "type": "user"
            }
        ],
        "dateLastModified": "2016-10-24T15:24:00.000Z",
        "demographics": {
            "href": "private url here",
            "sourcedId": "s557",
            "type": "demographics"
        },
        "email": "example@example.com",
        "familyName": "Smith",
        "givenName": "John",
        "identifier": "000000000",
        "metadata": {
            "ext_grade_level": "11"
        },
        "orgs": [
            {
                "href": "private URL here",
                "sourcedId": "000000000000000000000000000000",
                "type": "org"
            },
            {
                "href": "private URL Here",
                "sourcedId": "0000000000000000000000000000000000",
                "type": "org"
            },
            {
                "href": "private url here",
                "sourcedId": "000000000000000000000000000",
                "type": "org"
            }
        ],
        "role": "student",
        "sourcedId": "s557",
        "status": "active",
        "username": "000000000"
    },
    {

然后从“代理”开始重复:[ 对于下一个学生,大约 2,500 次。我真正想做的是以下,我有“students_data”=students_data.json()。

json1 = students_data['users']
stu_email = input("Enter a student email address here:")

if item in json1 == stu_email:
    print(stu_email)

当我运行它时,什么也没有发生。它要求输入,然后就结束了。没有错误,什么都没有。我没有什么可去的,除了它显然是错误的。另外,如果它确实有效,那么我将如何打印匹配地址的familyName、givenName 和标识符?

嵌套在字典中的列表真的让我很困惑,因为我知道如何处理列表的唯一方法是使用 [0] 或 [1] 等进行索引。但是,在这种情况下,这不是一个选项。

另外,我尝试做 json1['email'] 但我得到“TypeError:列表索引必须是整数或切片,而不是 str”,我认为这是因为我跳过了列表。

感谢您的帮助!

【问题讨论】:

  • if item in json1 == stu_email 的工作原理如下:首先,Python 检查item 是否在json1 中。不管是不是,结果都是True或者False,但是没有一个等于stu_email。您需要一个循环遍历学生列表并将stu_email 与每个学生的电子邮件进行比较。
  • 这更有意义,真假部分,谢谢。
  • P.S.谁能解释为什么我的问题被否决了?我想问更好的问题。

标签: python json


【解决方案1】:

Json 数据可以由相互嵌套的字典和列表组成。在这里,我们遍历列表 student_data['users'] 以查找第一个具有匹配电子邮件的 student

student_email = input("Enter a student email address here:")

for student in students_data['users']:
    if student['email'] == student_email:
        print('found a match')
        print(student)
        break
else:
    print('no match found')

【讨论】:

  • 我会保持安全并做if 'email' in student and student['email']==...
  • 取决于上下文。如果我希望每个学生都有一个电子邮件字段,我宁愿提出KeyError 并让程序崩溃,也不愿悄悄地接受损坏的 json 数据。 错误不应该默默地过去。除非明确静音
  • 感谢您的洞察力,这对我很有用。出于某种原因,我很难通过列表/字典进行思考。
  • 在编写处理嵌套数据的代码时,我通常会打开一个 python repl。然后我可以交互式地探索数据结构,并在每一步中更好地了解数据类型和数据的形状。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
相关资源
最近更新 更多