我试图将我的元组列表转换为一个包含该位置值的字典,并加入一个列表。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在上述情况下)可以做到这一点?
我建议在这件事上使用流行的模块集合和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)
这很容易使用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]因为我们在适当的位置进行附加)
| 归档时间: |
|
| 查看次数: |
810 次 |
| 最近记录: |