0

finaldict最初のファイルから特定のクエリ単語のリストを取得できる defaultdict が必要です。

最後の dict は、同じ ID を共有する両方のファイルからの単語のペアの辞書です。たとえば、同じIDfoo, oofを共有し1243ます。1453後で単語ペア検索を容易にするためです。検索しようとすると('foo','oof')、 が返され['1243','1453']ます。finaldict で を検索する('foo','duh')と、単語ペアが同じ ID を共有していないため、何も返されません。

query = ['foo','barbar']

finaldict = defaultdict(list)

finaldict = {('foo','oof'):['1243','1453']
('foo','rabrab'):['2323']
('barbar','duh'):['6452']}

私は以下のようにしていますが、より簡単に達成する方法はありfinaldictますか?

query = ['foo','barbar']
from collections import defaultdict

dict1 = defaultdict(list)
dict2 = defaultdict(list)

dict1['foo'] = ['1234','1453','2323']; 
dict1['bar'] =['5230']; dict1['barbar'] =['6452']

dict2['1243']=['oof']
dict2['1453']=['oof']
dict2['4239']=['rba']
dict2['2323']=['rabrab']
dict2['6452']=['duh']

tt = defaultdict(defaultdict)
for p in sorted(query):
  for ss in sorted(dict1[p]):
    if len(dict2[ss]) != 0 and dict2[ss] != None:
      tt[p][ss] = dict2[ss]

finaldict = defaultdict(set)

for src in tt:
  for ss in tt[src]:
    for trg in tt[src][ss]:
      finaldict[(src, trg)].add(ss)

print finaldict[('foo','oof')]

上記のコードは次を出力します。

>>> print finaldict[('foo','oof')]
set(['1453'])
>>> for i in finaldict:
...     print i, finaldict[i]
... 
('foo', 'rabrab') set(['2323'])
('barbar', 'duh') set(['6452'])
('foo', 'oof') set(['1453'])
4

1 に答える 1

1
{(k1,v):k2 for k1 in dict1 for k2 in dict2 
           for v in dict2[k2] if k2 in dict1[k1]}

{('barbar', 'duh'): '6452', ('foo', 'oof'): '1453', ('foo', 'rabrab'): '2323'}

于 2013-04-12T02:02:48.263 に答える