我有這組元組:
tokens = [('abstract', '1'), ('text', '1'), ('oie', '1'), ('idk', '1'), ('idk', '2'), ('pos', '2'), ('idk', '2'), ('idk', '2'), ('com', '2'), ('ggg', '4'), ('obama', '4'), ('joe', '4'), ('idk', '4')]
我需要將它放入這樣的嵌套字典中:
dict_items([('abstract', {?'1': 1}?), ('text', {?'1': 1}?), ('oie', {?'1': 1}?), ('idk', {?'1': 1, '2': 3, '4': 1}?), ('pos', {?'2': 1}?), ('com', {?'2': 1}?), ('ggg', {?'4': 1}?), ('obama', {?'4': 1}?), ('joe', {?'4': 1}?)])
這是: "term1" : {"text file number":"number of appearences"}
所以“idk”一詞在檔案1中出現了一次,在檔案2中出現了3次,在檔案4中出現了兩次
uj5u.com熱心網友回復:
用:
tokens = [('abstract', '1'), ('text', '1'), ('oie', '1'), ('idk', '1'), ('idk', '2'), ('pos', '2'),
('idk', '2'), ('idk', '2'), ('com', '2'), ('ggg', '4'), ('obama', '4'), ('joe', '4'), ('idk', '4')]
res = {}
for o, i in tokens:
if o not in res:
res[o] = {}
if i not in res[o]:
res[o][i] = 0
res[o][i] = 1
print(res)
輸出
{'abstract': {'1': 1}, 'text': {'1': 1}, 'oie': {'1': 1}, 'idk': {'1': 1, '2': 3, '4': 1}, 'pos': {'2': 1}, 'com': {'2': 1}, 'ggg': {'4': 1}, 'obama': {'4': 1}, 'joe': {'4': 1}}
一種替代方法是使用 collections.defaultdict
from collections import defaultdict
tokens = [('abstract', '1'), ('text', '1'), ('oie', '1'), ('idk', '1'), ('idk', '2'), ('pos', '2'), ('idk', '2'), ('idk', '2'), ('com', '2'), ('ggg', '4'), ('obama', '4'), ('joe', '4'), ('idk', '4')]
d = defaultdict(lambda : defaultdict(int))
for o, i in tokens:
d[o][i] = 1
res = { k : dict(v) for k, v in d.items()}
print(res)
輸出
{'abstract': {'1': 1}, 'text': {'1': 1}, 'oie': {'1': 1}, 'idk': {'1': 1, '2': 3, '4': 1}, 'pos': {'2': 1}, 'com': {'2': 1}, 'ggg': {'4': 1}, 'obama': {'4': 1}, 'joe': {'4': 1}}
第三種選擇是使用collections.Counter:
from collections import Counter
tokens = [('abstract', '1'), ('text', '1'), ('oie', '1'), ('idk', '1'), ('idk', '2'), ('pos', '2'),
('idk', '2'), ('idk', '2'), ('com', '2'), ('ggg', '4'), ('obama', '4'), ('joe', '4'), ('idk', '4')]
d = {}
for (o, i), value in Counter(tokens).items():
if o not in d:
d[o] = {}
d[o].update({i : value})
print(d)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/340079.html
