wuxiaolananhui的个人博客分享 http://blog.sciencenet.cn/u/wuxiaolananhui

博文

python字典使用法 统计具有相同value的key

已有 8384 次阅读 2013-10-7 11:19 |系统分类:科研笔记| Python, 字典使用

在进行标签传播算法时,需要统计具有相同标签的节点,为此尝试了以下几种字典使用法:

若字典m = {'a':'123', 'b':'234', 'c':'123', 'd':'245', 'e':'234'} 想将字典m的相同的value的key合并,为此新建一个字典m2={}

>>> m2={}

>>> for k, v in m.items():

       if m2.has_key(v):

         m2[v].append(k)

       else:

          m2[v] = []

>>> m2

{'234': ['e'], '245': [], '123': ['c']} 结果不是我想要的!


>>> m2={'123':[],'234':[],'245':[]}

>>> for k, v in m.items():

      if m2.has_key(v):

         m2[v].append(k)

      else:

         m2[v] = []

>>> m2

{'234': ['b', 'e'], '245': ['d'], '123': ['a', 'c']}结果对了,但是字典创建过于繁琐


>>> q=['234','123','245']

>>> m2=dict.fromkeys(q,[])

>>> m2

{'234': [], '245': [], '123': []}

>>> for k, v in m.items():

      if m2.has_key(v):

         m2[v].append(k)

      else:

         m2[v] = []

>>> m2

{'234': ['a', 'c', 'b', 'e', 'd'], '245': ['a', 'c', 'b', 'e', 'd'], '123': ['a', 'c', 'b', 'e', 'd']}

m2中每个键的值都追加了?为什么呢?还是不明白(折腾了半天。。。),最终选择了:


>>> q=('234','123','245')

>>> for i in range(3):

     m2.update({q[i]:[]})

>>> m2

{'245': [], '234': [], '123': []}

>>> for k, v in m.items():

     if m2.has_key(v):

       m2[v].append(k)

     else:

       m2[v] = []

>>> m2

{'245': ['d'], '234': ['b', 'e'], '123': ['a', 'c']}

终于ok了, 但是第三种方法为什么会出现全部追加?它与第4种方法有你们本质区别吗?依旧不明白。。







http://blog.sciencenet.cn/blog-668239-730755.html

上一篇:ubuntu使用二
下一篇:python networkx画图

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2021-4-23 22:13

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部