You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python 3单行初始化C++中map<string, map<string, vector<int>>>等价结构?

等价数据结构与单行初始化方案

嘿,我太懂你从C++转Python时对这种嵌套容器的困惑了!先给你理清楚对应关系:

  • C++里的map<string, T>对应Python的dict[str, T](Python 3.9+支持这种类型提示,低版本可以省略类型标注用普通dict)
  • C++的vector<int>直接对应Python的list[int](或普通list)

所以你要的map<string, map<string, vector<int>>>,在Python里就是嵌套字典,最内层绑定列表,下面给你两种单行初始化的方案:

1. 最直接的普通空字典初始化

如果只是需要一个空的等价结构,一行代码就能搞定:

inverted_index = {}

不过这种方式下,往里面加元素时需要手动检查内层结构是否存在,举个例子:

# 往结构里添加词、文档ID和位置
word = "apple"
doc_id = "doc1"
position = 5

if word not in inverted_index:
    inverted_index[word] = {}
if doc_id not in inverted_index[word]:
    inverted_index[word][doc_id] = []
inverted_index[word][doc_id].append(position)

2. 用defaultdict自动创建嵌套结构(更省心)

要是不想每次加元素都写一堆判断,可以用Python标准库collections里的defaultdict,单行就能初始化一个自动生成内层结构的版本:

from collections import defaultdict
inverted_index = defaultdict(lambda: defaultdict(list))

这下就可以直接往里面塞元素了,完全不用管内层的字典和列表有没有创建:

# 直接添加,自动补全内层结构
inverted_index["apple"]["doc1"].append(5)
inverted_index["banana"]["doc2"].append(12)

如果需要加上类型提示让结构更清晰(Python 3.9+适用),可以这么写:

from collections import defaultdict
inverted_index: defaultdict[str, defaultdict[str, list[int]]] = defaultdict(lambda: defaultdict(list))

额外小提示

  • Python是动态类型语言,不像C++需要提前声明完整的结构类型,所以空字典{}本身就是合法的初始结构,后续可以动态嵌套字典和列表。
  • 如果你需要像C++map那样的有序性:Python 3.7及以上的普通dict已经是插入有序的;如果需要按键排序,随时用sorted(inverted_index.keys())来处理就行。

内容的提问来源于stack exchange,提问作者Ankit Srivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:27:01