首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Python将(key,value) (key,value)映射到(key,(value1,value2))

用Python将(key,value) (key,value)映射到(key,(value1,value2))
EN

Stack Overflow用户
提问于 2014-04-25 21:34:05
回答 2查看 807关注 0票数 2

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

代码语言:javascript
运行
复制
tuples = [(Tim, PageFoo), (Jen,PageBar), (Tim, PageBaz), ...]

我想循环这个列表并为每个用户创建一个新的列表或页面切分:

代码语言:javascript
运行
复制
newlist = [(Tim,[PageFoo, PageBaz]), (Jen, [PageBar]), ...]

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

有人能帮我通过我的心理障碍吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-25 21:42:00

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

代码语言:javascript
运行
复制
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'])]
票数 3
EN

Stack Overflow用户

发布于 2014-04-25 21:36:34

您可以使用collections.OrderedDict进行此操作,如果订单不重要,则选择collections.defaultdict

代码语言:javascript
运行
复制
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'])]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23303439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档