问题描述
|
嗨,我有一个这样的元组列表:
bigrams = [(\'wealth \',\'gain \'),(\'gain \',\'burnt \'),(\'burnt \',\'will \'),(\'will \ ', \'火\') ]
我希望将每个元组附加到字典作为字典的键。
我希望格式看起来像这样。
dict = {\"wealth-gain\": value,\"gain-burnt\": value ......}
我将如何创建一个循环,该循环将遍历bigrams列表中的每个元组并将其附加到字典中?
这是我所拥有的
For word in bigrams:
dict[(0+\"-\"+1) = dict
基本上我想带每个元组并在元组的每个单词之间添加一个“-”,然后将其附加到字典中?
任何想法如何做到这一点?
同样,如果将要添加到字典中的双字母组与字典中已经存在的双字母组匹配,我也不想将该双字母组添加到字典中。而是我想增加字典中已经存在的二元组的值。
任何想法如何做到这一点?
谢谢。
解决方法
怎么样:
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
,您可以使用join
方法:
bigrams = [ (\'wealth\',\'fire\') ]
dict_ = {}
for tup in bigrams:
k = \'-\'.join(tup)
dict_[k] = data.setdefault(k,0) + 1
或用生成器表达初始化:
bigrams = [ (\'wealth\',\'fire\') ]
dict_ = dict((\'-\'.join(tup),0) for tup in bigrams)
,您可以将列表中的元组直接用作字典键-无需将它们连接到单个字符串。在Python 2.7中,与collections.Counter
结合使用时特别方便:
from collections import Counter
bigrams = [(\'wealth\',\'fire\')]
counts = Counter(bigrams)
print counts
版画
Counter({(\'gain\',\'burnt\'): 1,\'fire\'): 1,(\'wealth\',\'gain\'): 1,\'will\'): 1})
,您应该使自己熟悉列表理解。这使得第一个列表的转换更加容易:
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\',\'fire\') ]
bigram_dict = {}
for bigram in bigrams:
key = \'-\'.join(bigram)
if key in bigram_dict:
bigram_dict[key] += 1
else:
bigram_dict[key] = 1
此外,我有义务指出,这些在任何形式,形状或形式上都不是二元组。我不确定您要说的是什么意思,但是它们肯定不是二元组!