Python中map <int,vector <int >>的等价物是什么?

Jer*_*rks 9 python dictionary

在C++中经常做这样的事情:

typedef map<int, vector<int> > MyIndexType;
Run Code Online (Sandbox Code Playgroud)

然后我在这里使用它:

MyIndexType myIndex;
for( ... some loop ...)
{
  myIndex[someId].push_back(someVal);
}
Run Code Online (Sandbox Code Playgroud)

如果地图中没有条目,代码将插入一个新的空向量,然后附加到它.

在Python中它看起来像这样:

myIndex = {}

for (someId,someVal) in collection:
   try:
      myIndex[someId].append(someVal)
   except KeyError:
      myIndex[someId] = [someVal]
Run Code Online (Sandbox Code Playgroud)

尝试除了这里有点难看.有没有办法告诉字典在字典声明时遇到KeyError时要插入的对象类型?

dda*_*daa 15

你想用:

from collections import defaultdict
myIndex = defaultdict(list)
myIndex[someId].append(someVal)
Run Code Online (Sandbox Code Playgroud)

标准库defaultdict对象.

Python文档中的示例用法:

>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
        d[k].append(v)

>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
Run Code Online (Sandbox Code Playgroud)


Ala*_*air 10

也许这样的东西:

myIndex = {}
for (someId,someVal) in collection:
    myIndex.setdefault(someId, []).append(someVal)
Run Code Online (Sandbox Code Playgroud)