首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >像这样合并python中的两个小块

像这样合并python中的两个小块
EN

Stack Overflow用户
提问于 2016-03-16 08:34:43
回答 6查看 71关注 0票数 3

我想把两个混蛋合并成这样:

发自:

代码语言:javascript
复制
  a1 = {u'2016-03-11': [u'20:00', u'22:10']}
  a2 = {u'2016-03-11': [u'20:00', u'23:10'],u'2016-03-12': [u'20:00', u'22:10']}

至:

代码语言:javascript
复制
  an = {u'2016-03-11': [u'20:00',u'22:10', u'23:10'],u'2016-03-12': [u'20:00', u'22:10']}

我需要一个函数合并两块

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-03-16 08:57:27

代码语言:javascript
复制
from collections import defaultdict


a1 = {u'2016-03-11': [u'20:00', u'22:10']}
a2 = {u'2016-03-11': [u'20:00', u'23:10'],u'2016-03-12': [u'20:00', u'22:10']}    

dd = defaultdict(set)
for d in a1, a2:
    for k, v in d.items():
        dd[k] |= set(v)
res = {k: sorted(v) for k, v in dd.items()}

print(res)
# {'2016-03-12': ['20:00', '22:10'], '2016-03-11': ['20:00', '22:10', '23:10']}
票数 1
EN

Stack Overflow用户

发布于 2016-03-16 08:44:33

使用setsorted将两个列表组合为一个列表并进行排序:

代码语言:javascript
复制
>>> a1 = {u'2016-03-11': [u'20:00', u'22:10']}
>>> a2 = {u'2016-03-11': [u'20:00', u'23:10'],u'2016-03-12': [u'20:00', u'22:10']}


>>> an = {}
>>> for d in a1, a2:
...     for key in d:
...         an[key] = sorted(set(an.get(key, []) + d[key]))
...         # ^^  Merge two lists (dictionary values) into one, and sort
... 
>>> print an
{u'2016-03-11': [u'20:00', u'22:10', u'23:10'],
 u'2016-03-12': [u'20:00', u'22:10']}

更新

使用字典理解的替代版本(假设只合并两个字典):

代码语言:javascript
复制
>>> {key: sorted(set(a1.get(key,[]) + a2.get(key,[]))) for key in set(a1)|set(a2)}
{u'2016-03-11': [u'20:00', u'22:10', u'23:10'],
 u'2016-03-12': [u'20:00', u'22:10']}
票数 1
EN

Stack Overflow用户

发布于 2016-03-16 08:50:46

代码语言:javascript
复制
a1 = {u'2016-03-11': [u'20:00', u'22:10']}
a2 = {u'2016-03-11': [u'20:00', u'23:10'],u'2016-03-12': [u'20:00', u'22:10']}


import copy
an = copy.deepcopy(a1)

for key, value in a2.iteritems():
    if key in an:
        an[key] = list(set(an[key] + a2[key]))
    else:
        an[key] = value

print an

>> {u'2016-03-11': [u'22:10', u'20:00', u'23:10'], u'2016-03-12': [u'20:00', u'22:10']}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36030392

复制
相关文章

相似问题

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