在C++中经常做这样的事情:
typedef map> MyIndexType;
然后我在这里使用它:
MyIndexType myIndex; for( ... some loop ...) { myIndex[someId].push_back(someVal); }
如果地图中没有条目,代码将插入一个新的空向量,然后附加到它.
在Python中它看起来像这样:
myIndex = {} for (someId,someVal) in collection: try: myIndex[someId].append(someVal) except KeyError: myIndex[someId] = [someVal]
尝试除了这里有点难看.有没有办法告诉字典在字典声明时遇到KeyError时要插入的对象类型?
你想用:
from collections import defaultdict myIndex = defaultdict(list) myIndex[someId].append(someVal)
标准库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])]
也许这样的东西:
myIndex = {} for (someId,someVal) in collection: myIndex.setdefault(someId, []).append(someVal)