【问题标题】:How to get the value details from dictionary of dictionary如何从字典的字典中获取值的详细信息
【发布时间】:2023-02-24 18:40:31
【问题描述】:

我的字典在下面

x={
"contacts":{
"101":{
"email":"messi@gmail.com",
"firstName":"Leo",
"lastName":"Messi",
"role":["Owner"]}
}
}
  • 如果“角色”是“所有者”,我需要提取电子邮件

代码如下

for i in (x.values()):
    for i,j in i.items():
        if 'Owner' in j['role']:
            print(j['email'])

有没有什么方法可以在不迭代超过 2 次的情况下进行提取

【问题讨论】:

  • 如果你不能确定你只需要查看 x['contacts'] dict 就没有什么可以做的了。
  • 角色中可以有多个匹配吗?

标签: python


【解决方案1】:

对于问题中显示的数据,您可以简单地执行以下操作:

x = {
    "contacts": {
        "101": {
            "email": "messi@gmail.com",
            "firstName": "Leo",
            "lastName": "Messi",
            "role": ["Owner"]}
    }
}

if 'Owner' in x['contacts']['101']['role']:
    print(x['contacts']['101']['email'])

...尽管我怀疑您真正想要的是与“联系人”关联的列表值

【讨论】:

    【解决方案2】:

    您可以使用列表理解来提取“所有者”联系人的所有电子邮件

      emails = [contact_dict['email'] for contact_dict in x['contacts'].values() if 'Owner' in contact_dict['role']]
    

    【讨论】:

      【解决方案3】:

      python 中有一些包可以更有效地做到这一点,例如,您可以将字典加载到 pandas 数据框中,然后您将能够更好地操作它。使用基本的 Python 工具,您将不得不使用循环或推导式。

      【讨论】:

        【解决方案4】:

        与您的意思最接近的解决方案可能是这样的:

        x = {
            "contacts": {
                "101": {
                    "email": "messi@gmail.com",
                    "firstName": "Leo",
                    "lastName": "Messi",
                    "role": ["Owner"]}
            }
        }
        
        for j in x["contacts"].values():
            if 'Owner' in j['role']:
                print(j['email'])
        

        此代码正确打印 messi@gmail.com

        我的解决方案使小假设目标数据完全在x["contacts"].values() 内并且仅依赖于一个简单的循环。

        【讨论】:

          猜你喜欢
          • 2013-01-17
          • 2021-06-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-03
          • 1970-01-01
          相关资源
          最近更新 更多