【问题标题】:How to filter through nested dictionaries in a list [duplicate]如何过滤列表中的嵌套字典[重复]
【发布时间】:2021-06-07 14:29:10
【问题描述】:

我有一个包含嵌套字典的 Patient_list,如下所示: 患者名单

[ {"id": 1
   "hospital":{"id": 1
    "doctor":{"id": 1}}
  },
  {"id": 2
   "hospital":{"id": 2
    "doctor":{"id": 1}}
  }]

我正在尝试过滤到它,以便我可以获取属于 id=1 医生的所有患者。我尝试了以下解决方案的不同变体,但没有成功。我不确定这是否是正确的方法。我将不胜感激。

id=1
result = [d for d in patient_list['hospital']['doctor'] if d['id'] == id]

【问题讨论】:

    标签: python


    【解决方案1】:

    你不能用字符串索引列表,它应该在每个列表项上完成。

    idx = 1
    results = [d for d in patient_list if d['hospital']['doctor']['id'] == idx]
    

    这将转化为

    idx = 1
    
    results = []
    for patient in patient_list:
        hospital = patient['hospital']
        doctor = hospital['doctor']
        doctor_id = doctor['id']
        if doctor_id == idx:
            results.append(patient)
    

    【讨论】:

    • 这行得通。谢谢!您可以编辑两次输入“in”的答案。非常感谢!
    【解决方案2】:

    问题中的json不正确。

    假设json如下:

    In [6]: patient_list
    Out[6]:
    [{'id': 1, 'hospital': {'id': 1}, 'doctor': {'id': 1}},
     {'id': 2, 'hospital': {'id': 2}, 'doctor': {'id': 1}}]
    
    In [7]: [d for d in patient_list if d["doctor"]['id'] == id]
    Out[7]:
    [{'id': 1, 'hospital': {'id': 1}, 'doctor': {'id': 1}},
     {'id': 2, 'hospital': {'id': 2}, 'doctor': {'id': 1}}]
    

    【讨论】:

    • 不要用变量覆盖内置的id,改用_idid_
    • 好点@gold_cy。代码仍然有效
    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2021-11-21
    • 2021-08-12
    • 1970-01-01
    • 2020-12-21
    • 2022-07-13
    相关资源
    最近更新 更多