kn3*_*n3l 8 python dictionary inverse
例如,我通过将字典作为参数传递来调用此函数:
>>> inv_map({'a':1, 'b':2, 'c':3, 'd':2})
{1: ['a'], 2: ['b', 'd'], 3: ['c']}
>>> inv_map({'a':3, 'b':3, 'c':3})
{3: ['a', 'c', 'b']}
>>> inv_map({'a':2, 'b':1, 'c':2, 'd':1})
{1: ['b', 'd'], 2: ['a', 'c']}
Run Code Online (Sandbox Code Playgroud)
如果
map = { 'a': 1, 'b':2 }
Run Code Online (Sandbox Code Playgroud)
我只能将此地图反转为:
inv_map = { 1: 'a', 2: 'b' }
Run Code Online (Sandbox Code Playgroud)
通过使用这个
dict((v,k) for k, v in map.iteritems())
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何为我的情况这样做?
Mar*_*rau 14
您可以在列表中使用defaultdict:
>>> from collections import defaultdict
>>> m = {'a': 2, 'b': 1, 'c': 2, 'd': 1}
>>> dd = defaultdict(list)
>>> for k, v in m.iteritems():
... dd[v].append(k)
...
>>> dict(dd)
{1: ['b', 'd'], 2: ['a', 'c']}
Run Code Online (Sandbox Code Playgroud)
如果你不在乎你是否有dict或defaultdict,你可以省略最后一步并直接使用defaultdict.
你可以使用defaultdict或setdefault在这里.
def invertDictionary(orig_dict):
result = {} # or change to defaultdict(list)
for k, v in orig_dict.iteritems():
result.setdefault(v, []).append(k)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7986 次 |
| 最近记录: |