如何在python中向列表中插入值。。有一些额外的条件

如何在python中向列表中插入值。。有一些额外的条件,python,dictionary,nltk,Python,Dictionary,Nltk,嗨,我有一个元组列表,如下所示: bigrams=[(‘财富’、‘收益’、(‘收益’、‘燃烧’)、(‘燃烧’、‘意志’)、(‘意志’、‘火’)] 我希望将每个元组作为dictionarys键附加到dictionary中 我希望格式像这样 dict = {"wealth-gain": value, "gain-burnt": value ......} 如何创建一个循环,遍历bigrams列表中的每个元组并将其附加到字典中 这是我的 For word in bigrams: dict[

嗨,我有一个元组列表,如下所示:

bigrams=[(‘财富’、‘收益’、(‘收益’、‘燃烧’)、(‘燃烧’、‘意志’)、(‘意志’、‘火’)]

我希望将每个元组作为dictionarys键附加到dictionary中

我希望格式像这样

dict = {"wealth-gain": value, "gain-burnt": value ......} 
如何创建一个循环,遍历bigrams列表中的每个元组并将其附加到字典中

这是我的

For word in bigrams:
    dict[(0+"-"+1) = dict
基本上,我想取每个元组,在元组中的每个单词之间加一个“-”,然后将其附加到字典中

有什么办法吗

另外,如果将要添加到字典中的二元RAM与字典中已有的二元RAM匹配,我不想将该二元RAM添加到字典中。相反,我想增加字典中已经存在的双字符的值。 有什么办法吗


谢谢

您可以使用
join
方法:

bigrams = [ ('wealth', 'gain'), ('gain', 'burnt'), ('burnt', 'will'), ('will', 'fire') ]
dict_ = {}
for tup in bigrams:
    k = '-'.join(tup)
    dict_[k] = data.setdefault(k,0) + 1
或使用生成器表示初始化:

bigrams = [ ('wealth', 'gain'), ('gain', 'burnt'), ('burnt', 'will'), ('will', 'fire') ]
dict_ = dict(('-'.join(tup), 0) for tup in bigrams)

您可以使用
join
方法:

bigrams = [ ('wealth', 'gain'), ('gain', 'burnt'), ('burnt', 'will'), ('will', 'fire') ]
dict_ = {}
for tup in bigrams:
    k = '-'.join(tup)
    dict_[k] = data.setdefault(k,0) + 1
或使用生成器表示初始化:

bigrams = [ ('wealth', 'gain'), ('gain', 'burnt'), ('burnt', 'will'), ('will', 'fire') ]
dict_ = dict(('-'.join(tup), 0) for tup in bigrams)
那么:

d = {}
val = 0
bigrams = [ ('wealth', 'gain'), ('gain', 'burnt'), ('burnt', 'will'), ('will', 'fire') ]
for word in bigrams:
    s = '-'.join(word)
    if s in d:
        d[s] += 1
    else:
        d[s] = val
那么:

d = {}
val = 0
bigrams = [ ('wealth', 'gain'), ('gain', 'burnt'), ('burnt', 'will'), ('will', 'fire') ]
for word in bigrams:
    s = '-'.join(word)
    if s in d:
        d[s] += 1
    else:
        d[s] = val

你应该熟悉列表理解。这使得第一个列表的转换更容易:

bigrams = [x+"-"+y for x,y in bigrams]
现在看一下dict的setdefault方法,如下所示:

data={}#dict是内置的,所以不要将其用作变量名

for bigram in bigrams:
    data[bigram] = data.setdefault(bigram,0) + 1

如果您想获得更为压缩的版本,可以查看itertools模块。

您应该熟悉列表理解。这使得第一个列表的转换更容易:

bigrams = [x+"-"+y for x,y in bigrams]
现在看一下dict的setdefault方法,如下所示:

data={}#dict是内置的,所以不要将其用作变量名

for bigram in bigrams:
    data[bigram] = data.setdefault(bigram,0) + 1
如果您想获得更为压缩的版本,可以查看itertools模块。

尝试以下方法:

bigrams = [ ('wealth', 'gain'), ('gain', 'burnt'), ('burnt', 'will'), ('will', 'fire') ]
bigram_dict = {}
for bigram in bigrams:
    key = '-'.join(bigram)
    if key in bigram_dict:
        bigram_dict[key] += 1
    else:
        bigram_dict[key] = 1
此外,我觉得有必要指出,这些都不是以任何方式,形状或形式的大字。我不知道你到底想说什么,但他们肯定不是大人物

试试这个:

bigrams = [ ('wealth', 'gain'), ('gain', 'burnt'), ('burnt', 'will'), ('will', 'fire') ]
bigram_dict = {}
for bigram in bigrams:
    key = '-'.join(bigram)
    if key in bigram_dict:
        bigram_dict[key] += 1
    else:
        bigram_dict[key] = 1

此外,我觉得有必要指出,这些都不是以任何方式,形状或形式的大字。我不知道你到底想说什么,但他们肯定不是大人物

您可以将列表中的元组直接用作字典键——不需要将它们连接到单个字符串。在Python2.7中,这在与
集合的结合中变得特别方便

from collections import Counter
bigrams = [('wealth', 'gain'), ('gain', 'burnt'),
           ('burnt', 'will'), ('will', 'fire')]
counts = Counter(bigrams)
print counts
印刷品

Counter({('gain', 'burnt'): 1, ('will', 'fire'): 1, ('wealth', 'gain'): 1, ('burnt', 'will'): 1})

您可以将列表中的元组直接用作字典键——不需要将它们连接到单个字符串。在Python2.7中,这在与
集合的结合中变得特别方便

from collections import Counter
bigrams = [('wealth', 'gain'), ('gain', 'burnt'),
           ('burnt', 'will'), ('will', 'fire')]
counts = Counter(bigrams)
print counts
印刷品

Counter({('gain', 'burnt'): 1, ('will', 'fire'): 1, ('wealth', 'gain'): 1, ('burnt', 'will'): 1})

@燕-这样一个悲观主义者,使val=1:)。。。或者42岁!增值在哪里?阿希姆:啊,没有达到这个要求。修复了上面的问题。如果我想检查输入字典的键是否重复,您的第一个解决方案是否有效?如果键重复,它将增加值。@yan-这样一个悲观主义者,使val=1:)。。。或者42岁!增值在哪里?阿希姆:啊,没有达到这个要求。修复了上面的问题。如果我想检查我输入字典的键是否重复,你的第一个解决方案会起作用吗?如果键重复,它会增加值。只是一个次要的修改。我会使用bigrams=[“-”。在bigrams中,join((x,y))表示x,y]只是一个次要的修改。我会使用bigrams=[“-”。在bigrams中,join((x,y))表示x,y]自然语言处理中的双字格是指两个单词相继出现。我只是用元组来表示它们?在自然语言处理中,双元组是指两个单词一个接一个出现。我只是用元组来表示它们?