我的数据看起来像:
1 1.45
1 1.153
2 2.179
2 2.206
2 2.59
2 2.111
3 3.201
3 3.175
4 4.228
4 4.161
4 4.213
我想要的输出是:
1 2 (1 occurs 2 times)
2 4
3 2
4 3
为此,我运行以下代码:
SubPatent2count = {}
for line in data.split('\n'):
for num in line.split('\t'):
Mapper_data = ["%s\t%d" % (num[0], 1) ]
for line in Mapper_data:
Sub_Patent,count = line.strip().split('\t',1)
try:
count = int(count)
except ValueError:
continue
try:
SubPatent2count[Sub_Patent] = SubPatent2count[Sub_Patent]+count
except:
SubPatent2count[Sub_Patent] = count
for Sub_Patent in SubPatent2count.keys():
print ('%s\t%s'% ( Sub_Patent, SubPatent2count[Sub_Patent] ))
最后我得到一个错误:
3 for num in line.split('\t'):
4 #print(num[0])
----> 5 Mapper_data = ["%s\t%d" % (num[0], 1) ]
6 #print(Mapper_data)
7 for line in Mapper_data:
IndexError: string index out of range
如果你有任何想法,我可以处理这个错误,请帮助。 谢谢您!你知道吗
只是建议另一种方法:你试过列表理解+groupy来自
itertools
吗?你知道吗或者如果你想要精确的输出:
谢谢大家,你们的建议对我很有帮助,我修改了代码如下:
结果如下:
num[0]
可能是一个空字符串,这就是为什么会出现索引超出范围错误的原因。另一种可能性是,实际上是用空字符串(而不是制表符)分隔每行中的数字。你知道吗不管怎样,你的代码似乎有点奇怪。例如,将数据编码为一个元素列表(
Mapped_data
)中的字符串,然后对其进行解码以处理它。这真的没有必要,你应该避免。你知道吗请尝试以下代码:
相关问题 更多 >
编程相关推荐