2016-12-05 3 views
-2

의 비교 값이 나는 사전을 가지고있다. 이 예를 들어파이썬 같은 사전

는 원하는 결과는

update_d = {'Trump': ['MAGA'], 
      'Clinton': ['dems', 'Clinton'], 
      'Stein': ['Atlanta']} 

이 비슷한 질문이 here 요청이 있었다,하지만 난 내 목적을 수정할 수 없었다.

내 시도 :

new_d = {} 
for key in d: 
    for key2 in d: 
     lst = d[key] 
     lst2 = d[key2] 

     for string in lst: 
      for string2 in lst2: 
       if string not in new_d: 

내 문제는 내가 모든 키의 값을 비교하고 중복을 제거 할 것입니다. 그러나 이것이 어떻게 달성 될지 모르겠다.

+0

끔찍한 포맷팅에 대해 사과드립니다. – GRAp

+0

그래서 당신은 어떤 코드 *를 써 놓았으며 그 문제는 정확히 무엇입니까? [mcve]를 주면 코드 작성 서비스가 아닙니다. – jonrsharpe

+0

죄송합니다. 업데이트 된 게시물 – GRAp

답변

0

되지 않은 값을 선택할 수 있지만 수행 모듈을 사용하지 않고 중복을 제거하십시오 :

+0

감사합니다. 그것은 완벽하게 작동합니다. 변수 'dupvals'가 정확히 무엇을하는지 궁금합니다. – GRAp

+0

도움이 될 수있어서 기쁩니다. 죄송합니다. 코멘트로 더 설명해야했습니다. "모든 값에서 중복 된 값"을 나타 내기 위해'dupvals'를'list' 변수로 사용했습니다. 모든 키의 모든 값을 가져옵니다. 그런 다음 'dupvals'목록을 반복하여 두 번 이상 나타나는 모든 항목을 찾습니다. – davedwards

+0

확인. 보세요, 제가 이런 걸 생각해 낼 수 있었으면 좋겠어요. 다시 한번 당신의 솔루션은 제대로 작동하지 않았고 정말 일관성이 없었습니다. – GRAp

1

Counter을 사용하면 각 값이 d에 나타나는 횟수를 계산할 수 있습니다. 이 예에서

d = {'Trump': ['MAGA', 'FollowTheMoney'], 
    'Clinton': ['dems', 'Clinton'], 
    'Stein': ['FollowTheMoney', 'Atlanta']} 

from collections import Counter 

c = Counter(x for xs in d.values() for x in xs) 

, c의 값

Counter({'Atlanta': 1, 
     'Clinton': 1, 
     'FollowTheMoney': 2, 
     'MAGA': 1, 
     'dems': 1}) 

그럼 카운트 정확히 Counter을 사용하는 것과 같은 고급 1

update_d = {k: [v for v in vs if c[v] == 1] for k, vs in d.items()} 
+0

사전을 상당히 압축하여 위의 예는 효과가 없습니다. 또한이 과제를 위해 어떤 모듈도 사용할 수 없습니다. 나는 for 루프를 사용하여 키를 반복 해 보았지만 중첩 된 for 루프를 사용하여 같은 사전의 다른 값을 비교할 수없는 것처럼 보입니다. – GRAp

+0

@GRAp 과제에'Counter '를 사용할 수 없다면,'Counter'가 구현 된 방법을 생각한 다음 직접 (계산 부분) 구현하십시오. 그것은 어렵지 않습니다. –

+0

그래서, 문자열이 나타날 때마다 새로운 변수 인 i를 1 씩 증가시킵니다. (i + = 1). 그러나 나는 가치와 열쇠 사이의 관계를 유지하려고 노력하고 있으며 그것에 대해 어떻게 해야할지 모르겠습니다. – GRAp