2013-04-11 3 views
0

첫 번째 파일에서 쿼리 단어 목록이 주어진 finaldict을 얻을 수있는 defaultdict가 필요합니다.defaultdict (list)를 재 작성하는 방법 - 파이썬

마지막 dict는 동일한 ID를 공유하는 두 파일의 단어 쌍 사전입니다. 예 : foo, oof은 동일한 12431453 ID를 공유합니다. 나중에 단어 쌍 검색을 돕기 위해 ('foo','oof')을 검색하려고하면 ['1243','1453']을 반환합니다. 최종 결과를 ('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']) 
+1

'finaldict '를 만드는 기준을 정말로 이해하지 못합니다. 좀 더 잘 설명해 주시겠습니까? – mgilson

+0

은'finaldict'의 목적을 업데이트했습니다. 명확합니까? – alvas

답변

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

{('barbar', '뜨아') '6452'('갑', '웁') '1453 ', ('foo ','rabrab ') :'2323 '}

관련 문제