我有一个大的tab deltimized csv文件:第一个tab用于情感词,第二个tab用于八种基本情感,加上值positive
和negative
,最后一个tab是布尔值(如果第二个tab值与第一个匹配)。你知道吗
文件中的片段:
snarl anger 1
snarl anticipation 0
snarl disgust 1
snarl fear 0
snarl joy 0
snarl negative 1
snarl positive 0
snarl sadness 0
snarl surprise 0
snarl trust 0
snarling anger 1
snarling anticipation 0
snarling disgust 0
snarling fear 0
snarling joy 0
snarling negative 1
snarling positive 0
snarling sadness 0
snarling surprise 0
snarling trust 0
我的代码到目前为止:
import csv
from pprint import pprint
from itertools import groupby
l = list(csv.reader(open('NRC-Emotion-Lexicon-Wordlevel-v0.92.txt')))
f = lambda x: x[-1] #manipulate number to see different results
{k:[tuple(x[0:1]) for x in v] for k,v in groupby(sorted(l[1:], key=f), f)}
pprint(l)
我当前的输出不太好看:
['asylum\tanger\t0'],
['asylum\tanticipation\t0'],
['asylum\tdisgust\t0'],
['asylum\tfear\t1'],
['asylum\tjoy\t0'],
['asylum\tnegative\t1'],
['asylum\tpositive\t0'],
['asylum\tsadness\t0'],
['asylum\tsurprise\t0'],
['asylum\ttrust\t0'],
我的问题是:如何创建一个列表字典,其中每个重复的情感词都有一个唯一的关键字(将10次重复减少为1次,每次),并且在该字典关键字的列表中只包含第二个tab元素(当它们的布尔值为1时)?你知道吗
任何帮助都将不胜感激!你知道吗
编辑:作为其中一个答复,所需输出的示例如下所示:
{'snarl': ['anger', 'disgust'], #included in list due to having '1', ignoring 'positve' and 'negative'
'snarling': ['anger'], #etc...
}
编辑2:
文件的第一行和最后一行是空的,正如我在每个注释的答案中提到的。你知道吗
我想你已经接近答案了。但当你调用csv.reader文件,您没有指定分隔符(这意味着它默认为逗号作为分隔符)
您可以使用
collections.defaultdict
并在迭代csv.reader
对象时更新列表字典。你知道吗您的条件将添加到
if
语句中,注意通过int
将数字转换为整数。你知道吗结果:
这是一种方法。使用
defaultdict
例如:
根据评论编辑
相关问题 更多 >
编程相关推荐