键值计数筛选器字典

2024-10-06 09:44:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个过滤器,我试图找到关键和价值频率计数。在尝试其中一个代码块时,我面临以下错误困难。你知道吗

这些数据是关于twitter用户和相应的关键字的。我试图得到用户的tweet计数频率和每个独特的关键字的计数由各自的用户发布。这个数据集大约有1000行,而我在Input中只显示了其中的20行。你知道吗

输入

tweetcricscore  7.15E+17    3/30/2016   #wt20
tweetcricscore  7.15E+17    3/30/2016   #sausvsvic
tweetcricscore  7.15E+17    3/30/2016   #wt20
tweetcricscore  7.15E+17    3/30/2016   #sausvsvic
tweetcricscore  7.14E+17    3/28/2016   #wt20
tweetcricscore  7.14E+17    3/28/2016   #sausvsvic
tweetcricscore  7.14E+17    3/27/2016   #wt20
tweetcricscore  7.14E+17    3/27/2016   #sausvsvic
tweetcricscore  7.14E+17    3/27/2016   #wt20
tweetcricscore  7.14E+17    3/27/2016   #sausvsvic
tweetcricscore  7.14E+17    3/26/2016   #wt20
tweetcricscore  7.14E+17    3/26/2016   #canvsnk
tweetcricscore  7.14E+17    3/26/2016   #wt20
tweetcricscore  7.14E+17    3/26/2016   #sausvsvic
tweetcricscore  7.14E+17    3/26/2016   #wt20
tweetcricscore  7.14E+17    3/26/2016   #sausvsvic
tweetcricscore  7.14E+17    3/26/2016   #wt20
tweetcricscore  7.14E+17    3/26/2016   #sausvsvic
tweetcricscore  7.13E+17    3/23/2016   #wt20
tweetcricscore  7.13E+17    3/23/2016   #indvsban

代码:

with open('filter_1.csv', 'rb') as inp,open('filter_2.csv', 'wb') as out:
    writer = csv.writer(out)
    '''for row in csv.reader(inp):
        l.append(row[0])'''
    for row in csv.reader(inp):
        try:
            key_val = row[0],row[3]
            d[key_val] +=1
        except Exception as e:
            pass
    od = collections.OrderedDict(sorted(d.items()))

    for key,values in od.iteritems():
        writer.writerow([key[0],l.count(key[0]),key[3],values])

预期产量

tweetcricscore  234 #afgvssco   51
tweetcricscore  234 #afgvszim   46
tweetcricscore  234 #banvsire   12
tweetcricscore  234 #banvsned   46
tweetcricscore  234 #canvsnk    1
tweetcricscore  234 #cricket    178
tweetcricscore  234 #engvswi    46
tweetcricscore  234 #hkvssco    23
tweetcricscore  234 #indvsban   1
tweetcricscore  234 #sausvsvic  8
tweetcricscore  234 #wt20   56

我有以下错误

28 
     29         for key,values in od.iteritems():
---> 30                 writer.writerow([key[0],l.count(key[0]),key[3],values])
     32 

IndexError: tuple index out of range

该代码只是一个过程程序的一部分,这部分显示我在过滤输入错误。 谢谢你的建议。提前谢谢


Tags: csvkey代码用户inforas错误
1条回答
网友
1楼 · 发布于 2024-10-06 09:44:40

我无法运行您提供的示例,但根据阅读的代码,似乎您正在生成一个dict,其中键是元组,每个元组有两个元素:

key_val = row[0],row[3]
d[key_val] +=1

然后生成OrderedDict,在其中使用相同的键并迭代其中的项:

for key,values in od.iteritems():
    writer.writerow([key[0],l.count(key[0]),key[3],values])

在第二行中,您尝试从key获取索引3处的元素,这自然会失败,因为它只有两个元素。如果您将key[3]改为key[1],它应该可以按预期工作。你知道吗

相关问题 更多 >