Python 使用循环向字典插入值
我有一个包含这些值的字典:
{cluster1: 0, cluster2: 0, cluster3: 0}
我有一个数据文件,已经读取进来了,文件中的每一行都被表示成字典里的一个字符串,像这样。
[ "0,1,0,0,0,0,0,0,0,1,1,No,cluster3"," 0,1,0,0,1,0,0,0,0,1,1,No,cluster2" ]
我想要对数据文件中的每一行(以字符串的形式放在一个列表里)进行处理,遍历字典,比较键值,比如说“cluster1”,看看它是否包含子字符串“cluster1 2”或“cluster1 3”。然后根据比较的结果更新字典里的值。所以这个程序的目标是统计每个集群出现的次数,并把这些信息以字典的形式表示出来,字典里包含集群编号和对应的计数。
我只是对语法不太确定,目前我的循环是这样的:
for verse in verses:
for clusters[Key] in clusters:
if clusters[Key] in verse:
clusters.add(Key, +1) # tries to increment the value of
# the key if the key is in the string verse.
else:
print "not in"
有人能给我一些建议吗?
谢谢
3 个回答
0
l=[ "0,1,0,0,0,0,0,0,0,1,1,No,cluster3"," 0,1,0,0,1,0,0,0,0,1,1,No,cluster2" ]
d={'cluster1': 0, 'cluster2': 0, 'cluster3': 0}
for line in l:
tokens = line.split(',')
d[tokens[-1]]+=1
print d
{'cluster2': 1, 'cluster3': 1, 'cluster1': 0}
返回值
1
使用 defaultdict 和 rsplit(从右边分割)
verses = [ "0,1,0,0,0,0,0,0,0,1,1,No,cluster3"," 0,1,0,0,1,0,0,0,0,1,1,No,cluster2" ]
from collections import defaultdict
clusters = defaultdict(int)
for verse in verses:
key = verse.rsplit(',',1)[1]
clusters[key] += 1
print clusters
输出结果:
defaultdict(<type 'int'>, {'cluster2': 1, 'cluster3': 1})
4
你已经很接近了。你需要查看字典中的键:
for verse in verses: for k in cluster: if k in verse: clusters[k] += 1 else: print "not in"