Find a value in JSON using Python

后端 未结 4 1133
我在风中等你
我在风中等你 2020-12-28 20:06

I’ve previously succeeded in parsing data from a JSON file, but now I’m facing a problem with the function I want to achieve. I have a list of names, identification numbers

相关标签:
4条回答
  • 2020-12-28 20:11
    data = [
     {
       "id_number": "SA4784",
       "name": "Mark",
       "birthdate": None
     },
     {
       "id_number": "V410Z8",
       "name": "Vincent",
       "birthdate": "14/02/1989"
     },
     {
       "id_number": "CZ1093",
       "name": "Paul",
       "birthdate": "26/09/1994"
     }
    ]
    
    list(map(lambda x:x if x["id_number"]=="cz1093" ,data)
    

    Output should be

    [{
       "id_number": "CZ1094",
       "name": "Paul",
       "birthdate": "26/09/1994"
     }]
    
    0 讨论(0)
  • 2020-12-28 20:21

    Using lamda in Python

    data = [
     {
       "id_number": "SA4784",
       "name": "Mark",
       "birthdate": None
     },
     {
       "id_number": "V410Z8",
       "name": "Vincent",
       "birthdate": "15/02/1989"
     },
     {
       "id_number": "CZ1094",
       "name": "Paul",
       "birthdate": "27/09/1994"
     }
    ]
    

    Using Lambda and filter

    print(list(filter(lambda x:x["id_number"]=="CZ1094",data)))
    

    Output

    [{'id_number': 'CZ1094', 'name': 'Paul', 'birthdate': '27/09/1994'}]
    
    0 讨论(0)
  • 2020-12-28 20:27

    Given

    data = [
        {
        "id_number": "SA4784",
        "name": "Mark",
        "birthdate": None               #  the question wrongly contains a null
        },
        {
        "id_number": "V410Z8",
        "name": "Vincent",
        "birthdate": "15/02/1989"
        },
        {
        "id_number": "CZ1094",
        "name": "Paul",
        "birthdate": "27/09/1994"
        }
        ]
    

    to get "V410Z8" you may use:

    [x for x in data if x["id_number"]=="V410Z8"]
    

    which results:

    [{'id_number': 'V410Z8', 'name': 'Vincent', 'birthdate': '15/02/1989'}]
    
    0 讨论(0)
  • 2020-12-28 20:32

    You have to iterate over the list of dictionaries and search for the one with the given id_number. Once you find it you can print the rest of its data and break, assuming id_number is unique.

    data = [
     {
       "id_number": "SA4784",
       "name": "Mark",
       "birthdate": None
     },
     {
       "id_number": "V410Z8",
       "name": "Vincent",
       "birthdate": "15/02/1989"
     },
     {
       "id_number": "CZ1094",
       "name": "Paul",
       "birthdate": "27/09/1994"
     }
    ]
    
    for i in data:
        if i['id_number'] == 'V410Z8':
            print(i['birthdate'])
            print(i['name'])
            break
    

    If you have control over the data structure, a more efficient way would be to use the id_number as a key (again, assuming id_number is unique):

    data =  { "SA4784" : {"name": "Mark", "birthdate": None},
              "V410Z8" : { "name": "Vincent", "birthdate": "15/02/1989"},
              "CZ1094" : {"name": "Paul", "birthdate": "27/09/1994"}
            }
    

    Then all you need to do is try to access it directly:

    try:
        print(data["V410Z8"]["name"])
    except KeyError:
        print("ID doesn't exist")
    >> "Vincent"
    
    0 讨论(0)
提交回复
热议问题