按字典序排序?

7
我正在与Photobucket API集成,并在其api文档中发现了以下内容:

"按名称以字典顺序(字节排序,标准排序,不是自然或不区分大小写)对参数进行排序。如果参数具有相同的名称,则按值排序。"

这是什么意思?如何按字典顺序排序?字节排序是什么?
到目前为止,他们的其他文档都还好,但(对我来说)似乎这一行需要进一步解释。不幸的是,没有可以得到的解释。
无论如何,我将使用Python编写应用程序(最终将成为Django应用程序),如果您想要推荐特定模块来处理此类排序,请告诉我^_^
4个回答

8
我认为在这里,字典排序是 ASCII 排序的“别名”?
字典排序             自然排序
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

单词应该是“lexicographic”。

http://www.thefreedictionary.com/Lexicographic

字典顺序。按照字符串中的字母顺序进行排序。

正如它们所建议的那样,不要将大写和小写折叠在一起。只需使用Python内置的list.sort()方法即可。


我认为我从一个非常旧的OAuth 1.0规范版本中继承了拼写错误。 - Justin

4
这类似于Facebook API - 在生成签名哈希之前,查询字符串需要进行规范化处理。您可能有一个参数字典,例如:
params = {
  'consumer_key': "....",
  'consumer_secret': "....",
  'timestamp': ...,
  ...
}

如下所示创建查询字符串:
urllib.urlencode(sorted(params.items()))

params.items() 返回字典的键和值作为元组列表,sorted() 对列表进行排序,urllib.urlencode() 将它们连接成一个字符串并进行转义。


1

从这一部分引用更多内容:

生成基础字符串:
规范化参数:
- 将此请求的OAuth特定参数添加到输入参数中,包括: oauth_consumer_key = oauth_timestamp = oauth_nonce = oauth_version = oauth_signature_method = - 按名称字典序排序参数(字节顺序,标准排序,不是自然或大小写不敏感)。如果参数具有相同的名称,则按值排序。 - 对参数值进行编码,如RFC3986第2节所述(即urlencode)。 - 创建参数字符串()。这与HTTP 'postdata'或'querystring'的格式相同,即每个参数表示为name=value,由&分隔。例如,a=1&b=2&c=hello%20there&c=something%20else

我认为他们的意思是参数必须按照排序顺序出现 - 先是oauth_consumer_key,然后是oauth_nonce,再之后是...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接