【问题标题】:Test whether specific key and value exist in dictionary where multiple values stored as lists测试字典中是否存在特定键和值,其中多个值存储为列表
【发布时间】:2021-11-09 13:29:04
【问题描述】:

我有一个字典,有时每个键包含多个值。我想测试是否同时存在特定键和特定值。我可以在存在单个值的情况下执行此操作,但在列表格式中存在多个值的情况下无法弄清楚如何执行此操作。

因此,在下面的示例中,代码应该打印“sport present”,但事实并非如此。大概我需要遍历列表,但是如何在测试密钥的同时做到这一点?

student_dict = {
    "student1": ["esports"],
    "student2": ["football", "basketball"],
    "student3": ["football"]
}

key = "student2"
value = "football"

if (key, value) in student_dict.items():
    print("Sport present")

【问题讨论】:

    标签: python list dictionary if-statement


    【解决方案1】:

    先测试key,然后获取key关联的值(列表)并测试。

    你可以这样做:

    student_dict = {
        "student1": ["esports"],
        "student2": ["football", "basketball"],
        "student3": ["football"]
    }
    
    key = "student2"
    value = "football"
    
    if key in student_dict:
        if value in student_dict[key]:
            print("Sport present")
    

    【讨论】:

      【解决方案2】:

      首先,您可以使用key 为所有value 创建list,然后根据需要进行检查:

      >>> lst_key_values = [(key,v) for key,val in student_dict.items() for v in val]
      >>> lst_key_values
      [('student1', 'esports'),
       ('student2', 'football'),
       ('student2', 'basketball'),
       ('student3', 'football')]
      
      >>> key = "student2"
      >>> value = "football"
      >>> if (key, value) in lst_key_values:
          print("Sport present")
      
      Sport present
      

      【讨论】:

        【解决方案3】:

        您编写的代码只有在“足球”和“篮球”两个值都分配给“值”时才有效:

        student_dict = {
            "student1": ["esports"],
            "student2": ["football", "basketball"],
            "student3": ["football"]
        }
        
        key = "student2"
        value = ["football", "basketball"]
        
        if (key, value) in student_dict.items():
            print("Sport present")
        

        但如果您只想测试一个值,那么您应该使用 jfaccioni 提供的答案。

        【讨论】:

          【解决方案4】:

          您可以使用 dict.get 并默认返回:

          if value in student_dict.get(key, []):
              print("Sport present")
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-09-20
            • 1970-01-01
            • 2010-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多