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