2010-07-27 3 views
5

좋아, http://docs.python.org/library/urllib.html혼란 파이썬를 urlencode 순서

에 의한 "부호화 된 문자열 매개 변수의 순서는 시퀀스 파라미터 튜플의 순서와 일치한다." 나는이 코드를 실행하려고하는 경우를 제외하고

: 같은

import urllib 
values ={'one':'one', 
     'two':'two', 
     'three':'three', 
     'four':'four', 
     'five':'five', 
     'six':'six', 
     'seven':'seven'} 
data=urllib.urlencode(values) 
print data 

출력을 ...

seven=seven&six=six&three=three&two=two&four=four&five=five&one=one 

7,6,3,2,4,5,1?

내 튜플의 순서와 다르게 보입니다.

+1

: 나 알파벳이 같은 그것을 할 수있는 값을 인코딩, urlencode에서 결정적 결과를 얻을 수있는 방법을 찾고처럼 여기에 도착한다. 일련의 튜플을 전달하지 않으므로 일련의 튜플에 대한 문서를 인용하는 이유는 무엇입니까? –

답변

20

사전은 구현 방식 때문에 본질적으로 순서가 없습니다.

values = [ ('one', 'one'), ('two', 'two') ... ] 
+0

오, 알았어요. 이해 했어. 내 잘못이야. –

+3

@Neil : 이것이 맞는 대답이라면 체크 표시를 클릭하여 동의하십시오. –

5

단지의 경우 누군가 : 당신이 그들을 주문하려면, 대신 튜플의 목록 (또는 목록의 튜플, 또는 튜플 튜플, 또는 목록의 목록을 ...)를 사용한다 당신은 튜플의 순서를 통과하지 않는

from urllib.parse import urlencode 
values ={'one':'one', 
     'two':'two', 
     'three':'three', 
     'four':'four', 
     'five':'five', 
     'six':'six', 
     'seven':'seven'} 
sorted_values = sorted(values.items(), key=lambda val: val[0]) 
data=urlencode(values) 
print(data) 
#> 'five=five&four=four&one=one&seven=seven&six=six&three=three&two=two'