【问题标题】:python get dictionary values list as list if key match如果键匹配,python将字典值列表作为列表
【发布时间】:2025-11-26 04:10:01
【问题描述】:

我有以下列表和字典:

match_keys = ['61df50b6-3b50-4f22-a175-404089b2ec4f']

locations = {
  '2c50b449-416e-456a-bde6-c469698c5f7': ['422fe2d0-b10f-446d-ac3c-f75e5a3ff138'], 
  '61df50b6-3b50-4f22-a175-404089b2ec4f': [
   '7112fa59-63b1-4057-8822-fe11168c328f', '6d06ee0a-7447-4726-822f-942b9e12c9ce'
   ]
}

如果我想在 match_keys 列表中搜索匹配键的“位置”并提取它们的值,得到这样的东西......

['7112fa59-63b1-4057-8822-fe11168c328f', '6d06ee0a-7447-4726-822f-942b9e12c9ce']

...最好的方法是什么?

【问题讨论】:

  • 我没有关注这里的问题。您是否正在寻找一个普通的密钥查找,即locations[match_keys[0]]
  • 因此对于每个键匹配,在字典位置找到它们对应的值。
  • 好的,你在这里问的问题是什么?您的示例中只有一个键和一个结果列表,因此很难说这里需要解决什么。您是否有很多键要查找而不能按顺序查找?是否有一些效率考虑,例如大多数键不在字典中?一些后处理挑战,例如扁平化结果或消除重复?

标签: python python-3.x list dictionary


【解决方案1】:

您可以遍历match_keys 并使用dict.get 来获取每个键下的值:

out = [v for key in match_keys if key in locations for v in locations[key]]

输出:

['7112fa59-63b1-4057-8822-fe11168c328f', '6d06ee0a-7447-4726-822f-942b9e12c9ce']

【讨论】:

  • 谢谢。我得到一个列表列表。 [['7112fa59-63b1-4057-8822-fe11168c328f', '6d06ee0a-7447-4726-822f-942b9e12c9ce']] 有没有办法只拥有一个列表。 ['7112fa59-63b1-4057-8822-fe11168c328f', '6d06ee0a-7447-4726-822f-942b9e12c9ce']
  • 如果密钥不在字典中,这将失败并出现错误。
  • 我认为出于预期目的,密钥将始终在字典中。
  • @MarkR 这是问题中应该包含的重要信息,而不是一些答案评论。
【解决方案2】:
for key, value in locations.items():
    if key == match_keys[0]:
        print(value)

【讨论】:

    【解决方案3】:

    遍历键并通过 [] 获取值。

    res = []
    for key in matched_keys:
      res.append(matched_keys[key])
    

    或者如果你不想要列表列表,你可以使用 extend()

    res = []
    for key in matched_keys:
      res.extend(matched_keys[key])
    

    【讨论】: