在Python中将(键,值)(键,值)映射到(键,(value1,value2))

时间:2014-04-25 21:34:06

标签: python dictionary map

我有一个表格(用户,页面)的元组列表:

tuples = [(Tim, PageFoo), (Jen,PageBar), (Tim, PageBaz), ...]

我想循环遍历此列表,并为每个用户创建一个新的列表或页面序列:

newlist = [(Tim,[PageFoo, PageBaz]), (Jen, [PageBar]), ...]

我遇到的问题是这些页面不是由用户按顺序排列 - 因为我循环,我需要检查新列表以查看用户是否已经存在,如果是,则更新列表。

任何人都可以帮助我度过心理障碍吗?

2 个答案:

答案 0 :(得分:3)

@Aशwiniचhaudhary更快,但这里是defaultdict解决方案:

from collections import defaultdict

tuples = [('Tim', 'PageFoo'), ('Jen','PageBar'), ('Tim', 'PageBaz')]
result = defaultdict(list)
for key, value in tuples:
    result[key].append(value)
result
# Out[8]: defaultdict(<type 'list'>, {'Tim': ['PageFoo', 'PageBaz'], 'Jen': ['PageBar']})
dict(result)
# Out[9]: {'Jen': ['PageBar'], 'Tim': ['PageFoo', 'PageBaz']} 
result.items()
# Out[10]: [('Tim', ['PageFoo', 'PageBaz']), ('Jen', ['PageBar'])]

答案 1 :(得分:2)

您可以使用collections.OrderedDict,如果订单不重要,请转到collections.defaultdict

from collections import OrderedDict
tuples = [('Tim', 'PageFoo'), ('Jen', 'PageBar'), ('Tim', 'PageBaz')]
d = OrderedDict()
for k, v in tuples:
    d.setdefault(k, []).append(v)

>>> d.items()
[('Tim', ['PageFoo', 'PageBaz']), ('Jen', ['PageBar'])]