Сортировать лексикографически? - PullRequest
7 голосов
/ 08 мая 2009

Я работаю над интеграцией с API Photobucket, и я сталкивался с этим в их api docs :

"Сортировать параметры по имени лексографически [sic] (порядок байтов, стандартная сортировка, не натуральная или случайная нечувствителен). Если параметры имеют то же имя, а затем отсортировать по значению. "

Что это значит? Как мне отсортировать что-то лексикографически? порядок байтов?

Остальные их документы до сих пор были в порядке, но (мне) кажется, что эта строка требует дальнейшего объяснения. К сожалению, ничего не было.

В любом случае, я пишу приложение на Python (в конечном итоге оно станет приложением Django) на случай, если вы захотите порекомендовать конкретные модули, которые будут обрабатывать такую ​​сортировку для меня ^ _ ^

Ответы [ 4 ]

8 голосов
/ 08 мая 2009

Я думаю, что здесь лексикографический "псевдоним" для сортировки ascii?

Lexicographic          Natural  
z1.doc                  z1.doc    
z10.doc                 z2.doc    
z100.doc                z3.doc    
z101.doc                z4.doc    
z102.doc                z5.doc    
z11.doc                 z6.doc    
z12.doc                 z7.doc    
z13.doc                 z8.doc    
z14.doc                 z9.doc     
z15.doc                z10.doc    
z16.doc                z11.doc    
z17.doc                z12.doc    
z18.doc                z13.doc     
z19.doc                z14.doc     
z2.doc                 z15.doc    
z20.doc                z16.doc    
z3.doc                 z17.doc    
z4.doc                 z18.doc    
z5.doc                 z19.doc    
z6.doc                 z20.doc    
z7.doc                z100.doc    
z8.doc                z101.doc    
z9.doc                z102.doc    
6 голосов
/ 08 мая 2009

Слово должно быть "лексикографическим"

http://www.thefreedictionary.com/Lexicographic

Словарь порядка. Использование букв, как они появляются в строках.

Как они предполагают, не складывайте верхний и нижний регистры вместе. Просто используйте встроенный в Python метод list.sort ().

4 голосов
/ 08 мая 2009

Это похоже на API Facebook - строка запроса должна быть нормализована перед генерацией хэша подписи.

Возможно, у вас есть словарь параметров, таких как:

params = {
  'consumer_key': "....",
  'consumer_secret': "....",
  'timestamp': ...,
  ...
}

Создайте строку запроса примерно так:

urllib.urlencode(sorted(params.items()))

params.items() возвращает ключи и значения словаря в виде кортежей списка, sorted() сортирует список и urllib.urlencode() объединяет их в одну строку при экранировании.

1 голос
/ 08 мая 2009

Цитирую чуть больше из раздела:

2 Генерация базовой строки:

Нормализовать параметры:

  • Добавьте параметры ввода OAuth для этого запроса во входные параметры, включая:

    oauth_consumer_key = <consumer_key>
    oauth_timestamp = <timestamp>
    oauth_nonce = <nonce>
    oauth_version = <version>
    oauth_signature_method = <signature_method>
    
  • Сортировка параметров по имени лексографически [sic] (порядок байтов, стандартная сортировка, не натуральная или без учета регистра). Если параметры имеют одинаковое имя, сортируйте по значению.

  • Кодировать значения параметров, как в Разделе 2 RFC3986 (т. Е. Urlencode). Создайте строку параметров (). Это тот же формат, что и в HTTP 'postdata' или 'querystring', то есть каждый параметр представлен как name = value, разделенный символом &. Например, a=1&b=2&c=hello%20there&c=something%20else

Я думаю, что они говорят, что параметры должны появляться в отсортированном порядке - oauth_consumer_key до oauth_nonce до ...

...