由元组索引的Python`dict`:获取馅饼的一部分

Mic*_*ler 4 python indexing dictionary tuples

假设我有

my_dict = {
  ("airport", "London"): "Heathrow",
  ("airport", "Tokyo"): "Narita",
  ("hipsters", "London"): "Soho"
}
Run Code Online (Sandbox Code Playgroud)

什么是有效(不扫描所有键)但优雅的方式来从这个字典中获取所有机场,即预期输出["Heathrow", "Narita"]。在可以按元组索引的数据库中,通常可以执行以下操作

airports = my_dict.get(("airport",*))
Run Code Online (Sandbox Code Playgroud)

(但通常只有“星星”位于元组中最右侧的位置,因为索引通常仅按一种顺序存储)。

由于我想象 Python 以类似的方式使用元组键索引字典(使用键的固有顺序),我想可能有一种方法可以用来以这种方式对索引进行切片?

编辑 1:添加了预期输出

Edit2:删除了最后一个短语。在条件中添加了“(不扫描所有键)”以使其更清晰。

Kar*_*ath 6

您的数据目前的组织方式不允许有效查找 - 本质上您必须扫描所有键

字典是幕后的哈希表,访问值的唯一方法是获取键的哈希值 - 为此,您需要整个键

使用像这样的嵌套层次结构,因此您可以直接进行 O(1) 查找:

my_dict = {
  "airport": {
     "London": "Heathrow",
     "Tokyo": "Narita",
  },
  "hipsters": {
     "London": "Soho"
  }
}
Run Code Online (Sandbox Code Playgroud)