像这样在python中合并两个dict

2024-05-28 18:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把两个单词合并成这样:

发件人:

  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 = {u'2016-03-11': [u'20:00',u'22:10', u'23:10'],u'2016-03-12': [u'20:00', u'22:10']}

我需要一个函数合并两个dict


Tags: 函数ana2a1单词dict收件人
3条回答
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']}

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

>>> 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']}

更新

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

>>> {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']}
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']}

相关问题 更多 >

    热门问题