List Pythonic方法需要删除每个键的字符串数不同的值的副本
我有可用的代码(见下文),但我是python新手,我确信有更好的方法来处理这个问题。表情是长期情绪分析过程的产物。前面的代码检测并评估矛盾修饰法。如果检测到矛盾修饰法,则会发生重复,例如,代码发现“狂喜”和“焦虑”作为单独的标记,以及“狂喜焦虑”作为并列术语。因此,得出的情绪分数将是完全错误的/扭曲的。因此,逻辑是删除任何未并置的重复项。这个非搭配方面已经被考虑,所以在下面提供的代码中并不明显。你会注意到有一个部分检测“not”-这是检测简单的倒置,它不是矛盾修饰法,所以我只是过滤掉了非矛盾修饰法。省略了将列表转换回所需的正确dict格式的过程(天啊,多么复杂)。谢谢各位:List Pythonic方法需要删除每个键的字符串数不同的值的副本,list,dictionary,duplicates,List,Dictionary,Duplicates,我有可用的代码(见下文),但我是python新手,我确信有更好的方法来处理这个问题。表情是长期情绪分析过程的产物。前面的代码检测并评估矛盾修饰法。如果检测到矛盾修饰法,则会发生重复,例如,代码发现“狂喜”和“焦虑”作为单独的标记,以及“狂喜焦虑”作为并列术语。因此,得出的情绪分数将是完全错误的/扭曲的。因此,逻辑是删除任何未并置的重复项。这个非搭配方面已经被考虑,所以在下面提供的代码中并不明显。你会注意到有一个部分检测“not”-这是检测简单的倒置,它不是矛盾修饰法,所以我只是过滤掉了非矛盾修饰
emoDict = {'positive': 'confidence,ecstatic,ecstatic anxiety,hope,not offensive,', 'negative': 'alone,harassment,violence,suffer,depression,stress,'}
one_str = ""
for index, key in enumerate(emoDict):
one_str += emoDict[key]
one_list = one_str.split(',')
one_list = list(filter(None,one_list))
print ("original, cleaned list: ", one_list)
for index, row in enumerate(one_list):
if (len(row.split(' '))) > 1:
if (row.split(' ')[0] != "not"):
words = row.split(' ')
for index, word in enumerate(words):
if word != "not":
for index2, row2 in enumerate(one_list):
if word == row2:
one_list.remove(word)
print ("modifed list: ", one_list)
这是可行的,但肯定有一种更优雅/更少的方式?目前有20个LOC!谢谢 首先,您的
emo_dict
(遵守约定)的值应该是列表,而不是字符串:这样更易于阅读和操作
>>> emo_dict = {'positive': 'confidence,ecstatic,ecstatic anxiety,hope,not offensive,', 'negative': 'alone,harassment,violence,suffer,depression,stress,'}
>>> emo_dict = {k: v.strip(",").split(",") for k, v in emo_dict.items()}
>>> emo_dict
{'positive': ['confidence', 'ecstatic', 'ecstatic anxiety', 'hope', 'not offensive'], 'negative': ['alone', 'harassment', 'violence', 'suffer', 'depression', 'stress']}
我倒过来,因为你有一个:
现在,您的干净列表(aset
在这里更合适)就是dict的键:
>>> exprs = set(emo_by_expression.keys())
>>> exprs
{'confidence', 'ecstatic', 'ecstatic anxiety', 'hope', 'not offensive', 'alone', 'harassment', 'violence', 'suffer', 'depression', 'stress'}
循环基本上是一个过滤器:
非常感谢你!我会仔细看看这个,也会检查PEP8,祝你好运!
>>> exprs = set(emo_by_expression.keys())
>>> exprs
{'confidence', 'ecstatic', 'ecstatic anxiety', 'hope', 'not offensive', 'alone', 'harassment', 'violence', 'suffer', 'depression', 'stress'}
>>> to_remove = set()
>>> for expr in exprs:
... words = expr.split(' ')
... if len(words) > 1 and "not" not in words:
... to_remove.update(words)
...
>>> to_remove
{'ecstatic', 'anxiety'}
>>> exprs - to_remove
{'confidence', 'ecstatic anxiety', 'hope', 'not offensive', 'alone', 'harassment', 'violence', 'suffer', 'depression', 'stress'}
True