2013-03-24 2 views
-1

아래 예제에서 사전 형식을 만들고 싶습니다.파이썬 튜플에서 사전을 만드는 방법

c={ 
    'A':{('AB',2.9)}, 
    'B':{('AS',3.9)}, 
    'R':{('D',2.0)}, 
    'V':{('AD',2.9)}, 
    'G':{('AX',2.9)} 
} 

나는이 튜플 피드를 루프에 넣었습니다. 여기 내가 시도한 것이지만 잘못된 형식을 가지고 있습니다.

my_tuple = ('AB',2.9) 
c   = {} 
my_key = 'A' 
c.update({my_key:{my_tuple}}) 

이 특정 사례에 대해서는 {'A': set([('AB', 2.9)])}을 받고 싶습니다. 이것이 올바른 사전이라는 것을 이해합니다. 그러나 더 나은 결과를 얻고 형식으로 c의 값을 반환 할 수 있습니까? 내가 즉 원하는 :

{'A': {('AB', 2.9)}} 
+0

:-) 당신을 만족하기 위해 당신의 상상력을 사용하는 자유를 줄 것이다 __repr__의 자신의 버전을 만들 수 있습니다 당신은 당신이'세트'의 표상에 짜증이 난다고 우리에게 말하고 있습니까? – root

+0

아니요. 간단하고 쉬운 통합을 위해 필자의 요구 사항에서는 데이터를이 형식으로 출력해야하며, 그렇지 않은 경우에는 설정이 편합니다. @root 설정을 제거하고 {}을 사용하는 방법이 있습니까? 도움이 될 수 있습니다. 감사합니다. –

+0

성취하려는 것은 무엇입니까? 왜 '세트 표현'을 변경해야합니까? – root

답변

2

s = {1, 2, 3}는 따라서 s = set([1,2,3])

선언하는 짧은 방법입니다, 당신은 이미 단지 표현의 문제입니다, 당신이 원하는 것을 가지고있다. 표현은 당신에게 모든 문제의 경우, 당신은

>>> {('AB',2.9)} == set({('AB',2.9)}) 
True 
+0

나는 뭔가를 놓치고 있다고 생각한다. 당신이 한 일은 정확합니다. 어떻게 지금 내 세트 ({('AB', 2.9)})를 {('AB', 2.9)}에게 제시 할 수 있습니까? 이 결과는 파일로 보내지며 {('AB', 2.9)}로 작성되어야합니다. no set –

+0

표현이 모두 필요한 경우 원하는대로 정확히 수행하는 @ Abhijit의 대답을 참조하는 것이 좋습니다. ''set''의 자식 클래스의''__repr__'' 메소드를 정의함으로써 가능합니다. –

1

set에서 상속하고 당신에게

>>> class funky_set(set): 
    def __new__(cls,*args): 
     return set.__new__(cls,args) 
    def __repr__(self): 
     return "{{{}}}".format(','.join(map(str, self))) 

>>> my_tuple = ('AB',2.9) 
>>> c   = {} 
>>> my_key = 'A' 
>>> c.update({my_key:funky_set(my_tuple)}) 
>>> c 
{'A': {AB,2.9}} 
관련 문제