Python 辞書がキーと値のタプルを格納する方法を知っています。私が取り組んでいるプロジェクトでは、リストである値に関連付けられたキーを保存する必要があります。例: key -> [0,2,4,5,8] ここで、key はテキスト ファイルの単語です リスト値には、その単語が出現する DocID を表す int が含まれます。
別のドキュメントで同じ単語を見つけたらすぐに、その DocID をリストに追加する必要があります。
どうすればこれを達成できますか?
Python 辞書がキーと値のタプルを格納する方法を知っています。私が取り組んでいるプロジェクトでは、リストである値に関連付けられたキーを保存する必要があります。例: key -> [0,2,4,5,8] ここで、key はテキスト ファイルの単語です リスト値には、その単語が出現する DocID を表す int が含まれます。
別のドキュメントで同じ単語を見つけたらすぐに、その DocID をリストに追加する必要があります。
どうすればこれを達成できますか?
次のように、デフォルトを使用できます。
>>> import collections
>>> d = collections.defaultdict(list)
>>> d['foo'].append(9)
>>> d
defaultdict(<type 'list'>, {'foo': [9]})
>>> d['foo'].append(90)
>>> d
defaultdict(<type 'list'>, {'foo': [9, 90]})
>>> d['bar'].append(5)
>>> d
defaultdict(<type 'list'>, {'foo': [9, 90], 'bar': [5]})
ここは使い勝手が良さそうdefaultdict
from collections import defaultdict
docWords = defaultdict(set)
for docID in allTheDocIDs:
for word in wordsOfDoc(docID):
docWords[word].add(docID)
必要に応じて、セットの代わりにリストを使用できます
このようなもの?
word = 'something'
l = [0,2,4,5,8]
myDict = {}
myDict[word] = l
#Parse some more
myDict[word].append(DocID)
@Vinko Vrsalovic の回答を使いやすくするためのヘルパー クラスを作成したことがあります。
class listdict(defaultdict):
def __init__(self):
defaultdict.__init__(self, list)
def update(self, E=None, **F):
if not E is None:
try:
for k in E.keys():
self[k].append(E[k])
except AttributeError:
for (k, v) in E:
self[k].append(v)
for k in F:
self[k].append(F[k])
これは次のように使用できます。
>>> foo = listdict()
>>> foo[1]
[]
>>> foo.update([(1, "a"), (1, "b"), (2, "a")])
>>> foo
defaultdict(<type 'list'>, {1: ['a', 'b'], 2: ['a']})
あなたの質問が正しければ、これを試すことができます。
>>> a=({'a':1,'b':2});
>>> print a['a']
1
>>> a.update({'a':3})
>>> print a['a']
3
>>> a.update({'c':4})
>>> print a['c']
4
これは古いバージョンの python で動作します