2017-03-16 5 views
2

mydict은 id 번호가 키이고 일부 문자열은 값으로 간주합니다. 나는 그 값들 각각을 mydict에있는 다른 모든 값들과 비교하려고 노력하고 있습니다. 각 키 비교 ID 번호와 그 값과 문자열 비교 실제 결과 쌍 을 길게 것 인다른 사전 (파이썬)의 모든 조합에서 사전 만들기

그러면, 다른 사전 myresultsdict 이들의 비교 결과를 저장한다.

나는 itertools에서 조합을 통해 조합을 얻는 방법을 알고 있지만 위에서 언급 한 myresultsdict을 결합하는 데 어려움을 겪습니다. 이 예제의 목적을 위해 간단한 수정 거리 (Levenshtein.distance)를 사용합니다. 그 결과는 'myresultsdict'값이됩니다.

from itertools import combinations 
import Levenshtein 

mydict = {'01': "stringstringstringblah", 
      '02': "blahstringstringstringblah", 
      '03': "stringstringstringblahblahblah"} 

사람 I는 비교 사용자 ID 스트링 튜플을 갖고 myresultsdict를 구성하는 방법에 관한 일부 힌트를 제공 할 수있다 (즉 ('01','02'), ('01','03') 등)와 그 키로서 각각의 편집 거리 결과 각? 에 간단한 솔루션 아래

답변

1

(내가 아닌 사전의 조합을 찾기 위해 목록을 사용했다 수행하는 방법을 알아낼 수있는 모든 때문에 사과, 내 시도의 더 많은 코드를 제공 할 수 없습니다)입니다 당신의 일을 성취하십시오. 원하는만큼 터플을 반환하는 mydict 키 위로 combinations을 사용했습니다. 각 튜플에 대해 거리를 계산 한 다음 각각의 결과로 myresultsdict을 업데이트합니다.

튜플이 사전에 이미있는 경우 이전 값 (즉, 거리)이 덮어 쓰기됩니다.

from itertools import combinations 
import Levenshtein 

mydict = {'01': "stringstringstringblah", 
      '02': "blahstringstringstringblah", 
      '03': "stringstringstringblahblahblah"} 

myresultsdict = {} 
for a, b in combinations(mydict.keys(), 2): 
    myresultsdict[(a, b)] = Levenshtein.distance(mydict[a], mydict[b]) 

print(myresultsdict) 

출력한다 :

{('01', '02'): 4, ('03', '02'): 12, ('03', '01'): 8}