将元组列表转换为字典并保留重复项

Kyl*_*ner 1 python dictionary

我试图将我的元组列表转换为一个包含该位置值的字典,并加入一个列表。dict做我想要的,除了它删除重复项,这是我不想要的!

这是发生的事情:

>>> vals
[(5, u'3'), (5, u'3'), (8, u'1'), (8, u'1')]
>>> dict(vals)
{8: u'1', 5: u'3'}
Run Code Online (Sandbox Code Playgroud)

这就是我想要发生的事情

>>> vals
[(5, u'3'), (5, u'3'), (8, u'1'), (8, u'1')]
>>> foo(vals)
{8: [u'1',u'1'], 5: [u'3',u'3']}
Run Code Online (Sandbox Code Playgroud)

是否有其他一些python函数(foo在上述情况下)可以做到这一点?

Roc*_*lly 5

我建议在这件事上使用流行的模块集合和defaultdict

from collections import defaultdict
vals = [(5, u'3'), (5, u'3'), (8, u'1'), (8, u'1')]
def foo(lst):
    d = defaultdict(list)
    for key, value in lst:
        d[key].append(value)
    return d
print foo(vals)
# defaultdict(<type 'list'>, {8: [u'1', u'1'], 5: [u'3', u'3']})
Run Code Online (Sandbox Code Playgroud)


don*_*mus 5

这很容易使用setdefault

def foo(some_list):
    result = {}
    for k, v in some_list:
        result.setdefault(k, []).append(v)

    return result     
Run Code Online (Sandbox Code Playgroud)

(使用setdefault比使用 a 更有效,get(k, []) + [v]因为我们在适当的位置进行附加)