您的位置:首页 > 编程语言 > Python开发

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

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

若字典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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: