免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5535 | 回复: 6
打印 上一主题 下一主题

dict如何merge? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-10 10:36 |只看该作者 |倒序浏览
本帖最后由 rainhard_cu 于 2010-07-10 10:39 编辑

累加相同的key,举例:

  1. x = {"a": 1, "b":2}
  2. y = {"b": 3, "c":4}

  3. # 希望可以得到这样的结果
  4. z = {"a": 1, "b":5, "c":4}

复制代码
有没有简洁的方法

论坛徽章:
0
2 [报告]
发表于 2010-07-10 13:48 |只看该作者
不算简洁,引玉:
  1. x = {"a": 1, "b":2}
  2. y = {"b": 3, "c":4}

  3. kz=list(set(x.keys()+y.keys()))
  4. vz=[(x.has_key(k) and x[k] or 0)+(y.has_key(k) and y[k] or 0) for k in kz]

  5. z=dict(zip(kz,vz))
复制代码

论坛徽章:
0
3 [报告]
发表于 2010-07-11 09:07 |只看该作者
  1. def dmerge(*dicts):
  2.         D={}
  3.         for d in dicts:
  4.                 for i in d:
  5.                         if i in D:
  6.                                 D[i]+=d[i]
  7.                         else:
  8.                                 D[i]=d[i]
  9.         return D
复制代码
土办法将就一下吧。。。。

论坛徽章:
0
4 [报告]
发表于 2010-07-11 10:44 |只看该作者
知道dict有一个update方法吗?

论坛徽章:
0
5 [报告]
发表于 2010-07-11 10:46 |只看该作者
楼主的merge,update明显不适用。

论坛徽章:
0
6 [报告]
发表于 2010-07-11 14:27 |只看该作者
。。。。楼上分裂了。。

论坛徽章:
0
7 [报告]
发表于 2010-07-11 16:15 |只看该作者
python3.1有内置的方法来处理这个问题

PythonWin 3.1.2 (r312:79147, Mar 22 2010, 12:20:29) [MSC v.1500 32 bit (Intel)] on win32.
Portions Copyright 1994-2008 Mark Hammond - see 'Help/About PythonWin' for further copyright information.
>>> import collections
>>> x = {"a": 1, "b":2}
>>> y = {"b": 3, "c":4}
>>> c = collections.Counter(x)
>>> c
Counter({'b': 2, 'a': 1})
>>> c.update(y)
>>> c
Counter({'b': 5, 'c': 4, 'a': 1})
>>> z = dict(c)
>>> z
{'a': 1, 'c': 4, 'b': 5}
>>>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP