2012-07-26 2 views
2

로 저장 사용하고 계십니까?는 정수 키 사전 및 복합 필드 형식은() 문자열

나는 그것을 해제 파이썬 (나쁜 프로그래밍)는 키가있는 딕셔너리를 가질 수 있다는 것을 얻을 ...하지만이 경우,이 방법도 사용할 수 없습니다 :

>>> a_dict = {0: 'int zero', 
...   '0': 'string zero', 
...   '0start': 'starts with zero'} 
>>> a_dict 
{0: 'int zero', '0': 'string zero', '0start': 'starts with zero'} 
>>> a_dict[0] 
'int zero' 
>>> a_dict['0'] 
'string zero' 
>>> " 0 is {0[0]}".format(a_dict) 
' 0 is int zero' 
>>> "'0' is {0['0']}".format(a_dict) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
KeyError: "'0'" 
>>> "'0start' is {0[0start]}".format(a_dict) 
"'0start' is starts with zero" 
을 하나가 아닌 경우에도 적어도 그 일관성 그래서

{0[0]}.format(a_dict)는 항상 키 int 0를 참조합니다 :

>>> del a_dict[0] 
>>> a_dict 
{'0': 'string zero', '0start': 'starts with zero'} 
>>> "{0[0]}".format(a_dict) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
KeyError: 0L 

(그리고 그래, 내가 필요하면 그냥 '%s' % a_dict['0']을 할 수있는 알고있다.)

+0

또한 [PEP 3101] (http://www.python.org/dev/peps/pep-3101/)에서 :'키는 따옴표로 구분되지 않기 때문에 임의의 사전 키를 지정할 수 없습니다 예 : 문자열 "10"또는 ": -]") 형식 문자열 내에서. – aneroid

답변

3

수 없습니다. 형식을 지정하려면 추가 인수를 전달해야합니다.

>>> "'0' is {0[0]} {1}".format(a_dict, a_dict['0']) 
+1

** ** 여기서 열쇠가 될 수 없습니다. 의도 한 말장난. – aneroid

1

편집 : 문제를 파악했습니다. 그것은 dict을 부르고있다. getitem 문자열이 ''0 ' "이고 예상 값이'0 '이 아닙니다. 그러므로 이것은 불가능합니다. 죄송합니다.

+1

형식 사양의 색인 생성이 비트 반쪽이므로 구분 기호가 필요하지 않으므로 여기에 모호하므로 하나 또는 둘 중 하나를 선택하면됩니다. – Julian

+1

index_string에 [] 이외에 다른 문자가 포함될 수 있다는 것을 제외하고는]. 그리고 그것은 커스텀 클래스를 전달함으로써 확인 될 수있는 것처럼 문자열 0으로 getitem을 호출합니다. – Antimony

+0

죄송합니다, 당신이 옳았습니다. 나는 지금 문제를 안다. – Antimony