【问题标题】:Search Lists in dict for Value, if found return dict identifier在字典中搜索值的列表,如果找到返回字典标识符
【发布时间】:2020-08-18 06:43:14
【问题描述】:

很难解释,所以我将在下面举一个例子:

res = {
  "merchantPermissionsMap" : {
    "33427" : ["AAA", "BBB", "CCC"],
    "12345": ["AAA", "CCC"],
    "67890": ["BBB"]
  }
}

所以我需要在res['merchantPermissionsMap'] 中搜索任何出现的权限,如果找到则返回相应的 id。

我知道下面的内容是错误的,但这是我期望的方式:

message = ''
for i in res['merchantPermissionsMap']:
    if 'BBB' in i:
        message += f" {i}"
print(f"BBB appears in{message}")

输出将是:BBB appears in 33427, 67890

【问题讨论】:

    标签: python python-3.x list dictionary search


    【解决方案1】:

    您正在检查BBB in 键,您应该检查值 这里i是关键

    for i in res['merchantPermissionsMap']:
        print(i)
    

    输出:

    33427
    12345
    67890
    

    你应该改变你的if条件if 'BBB' in res['merchantPermissionsMap'][i]

    for i in res['merchantPermissionsMap']:
        if 'BBB' in res['merchantPermissionsMap'][i]:
            message += f" {i}"
    print(f"BBB appears in{message}")
    

    【讨论】:

      【解决方案2】:

      您可以使用列表推导式来获得所需的结果

      
      res = {
        "merchantPermissionsMap" : {
          "33427" : ["AAA", "BBB", "CCC"],
          "12345": ["AAA", "CCC"],
          "67890": ["BBB"]
        }
      }
      
      appears = ", ".join([k for k,v in res["merchantPermissionsMap"].items() if "BBB" in v])
      
      print(f"BBB appears in {appears}")
      

      输出:

      BBB appears in 33427, 67890
      

      您的代码,您正在循环遍历 merchantPermissionsMap 字典的键。或者通过.items()循环遍历键和值

      for k,v in res['merchantPermissionsMap'].items():
          if 'BBB' in v:
              message += f" {k}"
      print(f"BBB appears in{message}")
      

      【讨论】:

        【解决方案3】:

        您需要遍历您的字典以获得所需的输出。试试下面的代码;

        def search(res,string):
        a=[]
        for key, value in res.items():
            for k,v in value.items():
                if 'BBB' in v:
                    a.append(k)
        return a
        
        print(search(res.'BBB'))
        

        【讨论】:

          猜你喜欢
          • 2021-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-19
          相关资源
          最近更新 更多