2016-08-11 3 views
1

물론이 질문은 인기있는 것 같지만 실제로 찾을 수는 없습니다 (아마도 올바른 검색어를 사용하지 않았을 것입니다.). 어쨌든, 나는 이런 종류의 뭔가가 필요합니다 키의 값이 DICT 이미 때마다사전에 같은 값으로 여러 키를 매핑하는 방법이 필요합니다.

tel = {} 
tel['1 12'] = 1729 
tel['9 10'] = 1729 
tel['1 2'] = 9 
tel['2 1'] = 9 
tel['1 1'] = 2 
print(tel) 

{['1 1'] : 2, ['1 2', '2 1'] : 9, ['1 12', '9 10'] : 1729} 

그래서, 그 값에 키 매핑 목록에 키를 추가를; 그렇지 않으면, dict에 키 값 쌍을 추가하십시오.

편집 나는 당신의 많은 혼동하면 미안하고, 다음은 훨씬 더 :)

이는 내가 해결하고 싶은 원래 문제가 당신에게 혼란 만약 내가 정말 미안 해요 : 감안할 때 방정식 a^3 + b^3은 a, b에 대한 모든 양의 정수 쌍 값을 평가할 때 방정식 값에 1000 미만으로 매핑하는 사전을 생성합니다. 두 쌍이 동일한 값으로 평가 될 때 두 쌍이 사전 이 같은 값을 공유하도록하려면 을 어떻게 든 함께 그룹화하십시오. (나는 이미 서로 다른 키를 하나의 dict에 동일한 값으로 매핑 할 수 있다는 것을 알고 있지만이 그룹이 필요하다.) 일부 정수 쌍에 대한

for a in range(1, 1000): 
    for b in range(1, 1000): 
     map pair (a, b) to a^3 + b^3 

(A, B) 및 (P, Q) 어디 = P 및 B = Q, A :!

은 그래서 내 의사 코드의 샘플로 제공 될 것이다^3 + b^3 == p^3 + q^3. 나는이 짝을 어떤 식 으로든 그룹화하기를 원합니다. 예를 들어, [(1,12), (9, 10)]은 1729로 매핑됩니다. 이것이 제가 원하는 것을 더 분명하게 해주기를 바랍니다.

EDIT2 많은 사람들이 지적했듯이 빠른 조회 시간을 의미 할 경우 키 값 쌍을 전환해야합니다. 이는 key : value 쌍의 값이 튜플 일 필요가 있음을 의미합니다.

+8

왜 값 키와 키 값이 아닌, 값도 매핑 할 수 있습니다 – depperm

+0

@depperm을 감지하는 것 같다 사전에서 같은 값으로 그렇다면 정상적인 dict의 문제점을 설명해 주시겠습니까? 특정 값을 가리키는 키 목록에 대한 조회 액세스가 필요합니까? – wim

+3

여러 키를 이미 해쉬하지 않을 수 있습니다 더 많은 수 있도록 주어진 아니에요 그런 식으로 – wim

답변

1

, 당신은 당신의 키/값 반전 구조 을 가지고 이미 지적한 의견의 많은 분들 보인다. int 값을 으로 분해하는 것이 좋습니다. 이 방법을 사용하면 int 값을 키로 사용하여 효율적인 사전 검색을 수행하고 사전에 intended을 사용하여 데이터에서보다 세련되고 단순한 디자인을 구현할 수 있습니다.

예 : {9: ('1 2', '2 1'), 2: ('1 1',), 1729: ('9 10', '1 12')}

아래의 코드 조각은 당신이 무엇을 필요로 할 것이라고 말했다되고있다. 위의 그림과 같이 먼저 데이터를 매핑 한 다음 은 키/값을으로 반전합니다.

tel = {} 
tel['1 12'] = 1729 
tel['9 10'] = 1729 
tel['1 2'] = 9 
tel['2 1'] = 9 
tel['1 1'] = 2 
#----------------------------------------------------------- 
from collections import defaultdict 

new_tel = defaultdict(list) 
for key, value in tel.items(): 
    new_tel[value].append(key) 

# new_tel -> {9: ['1 2', '2 1'], 2: ['1 1'], 1729: ['9 10', '1 12']} 
print {tuple(key):value for value, key in new_tel.items()} 
>>> {('1 2', '2 1'): 9, ('1 1',): 2, ('9 10', '1 12'): 1729} 
+0

OP에게 이것은 나쁜 생각 인 것처럼 보이지만 요청한 것입니다. 따라서 당신이 정말로 원하는 것을 묻는 의견은 무엇입니까? –

+0

@Kenny Ostrom Uhm, 내 대답을 코드로 바꾸면 무슨 뜻인지 모르시겠습니까? 방금 설명과 형식을 추가했습니다. – ospahiu

+1

예, 분명히. 처음에는 그것을 잘못 읽은 다음 편집을 보았습니다. 나는 성급하게 무례 함을 사과합니다. –

관련 문제