List Pythonic方法需要删除每个键的字符串数不同的值的副本

List Pythonic方法需要删除每个键的字符串数不同的值的副本,list,dictionary,duplicates,List,Dictionary,Duplicates,我有可用的代码(见下文),但我是python新手,我确信有更好的方法来处理这个问题。表情是长期情绪分析过程的产物。前面的代码检测并评估矛盾修饰法。如果检测到矛盾修饰法,则会发生重复,例如,代码发现“狂喜”和“焦虑”作为单独的标记,以及“狂喜焦虑”作为并列术语。因此,得出的情绪分数将是完全错误的/扭曲的。因此,逻辑是删除任何未并置的重复项。这个非搭配方面已经被考虑,所以在下面提供的代码中并不明显。你会注意到有一个部分检测“not”-这是检测简单的倒置,它不是矛盾修饰法,所以我只是过滤掉了非矛盾修饰

我有可用的代码(见下文),但我是python新手,我确信有更好的方法来处理这个问题。表情是长期情绪分析过程的产物。前面的代码检测并评估矛盾修饰法。如果检测到矛盾修饰法,则会发生重复,例如,代码发现“狂喜”和“焦虑”作为单独的标记,以及“狂喜焦虑”作为并列术语。因此,得出的情绪分数将是完全错误的/扭曲的。因此,逻辑是删除任何未并置的重复项。这个非搭配方面已经被考虑,所以在下面提供的代码中并不明显。你会注意到有一个部分检测“not”-这是检测简单的倒置,它不是矛盾修饰法,所以我只是过滤掉了非矛盾修饰法。省略了将列表转换回所需的正确dict格式的过程(天啊,多么复杂)。谢谢各位:

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']}
我倒过来,因为你有一个:

现在,您的干净列表(a
set
在这里更合适)就是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