正如標題所示,我正在嘗試在 python 中使用 Ordered Dict 進行 urlencode
def url_replace(request, field, value, direction=""):
dict_ = request.GET.copy()
if field == "order_by" and field in dict_.keys():
if dict_[field].startswith("-") and dict_[field].lstrip("-") == value:
dict_[field] = value
elif dict_[field].lstrip("-") == value:
dict_[field] = "-" value
else:
dict_[field] = direction value
else:
dict_[field] = direction str(value)
print("UNORDERED___________________")
print(dict_)
print(super(MultiValueDict, dict_).items())
print("ORDERED_____________")
print(OrderedDict(super(MultiValueDict, dict_).items()))
print(OrderedDict(dict_.items()))
return urlencode(OrderedDict(dict_.items()))
上述代碼的輸出
UNORDERED___________________
<QueryDict: {'assigned_to_id': ['1', '2'], 'client_id': ['2', '1'], 'page': ['2']}>
dict_items([('assigned_to_id', ['1', '2']), ('client_id', ['2', '1']), ('page', ['2'])])
OrderedDict([('assigned_to_id', '2'), ('client_id', '1'), ('page', '2')])
ORDERED_____________
OrderedDict([('assigned_to_id', ['1', '2']), ('client_id', ['2', '1']), ('page', ['2'])])
OrderedDict([('assigned_to_id', '2'), ('client_id', '1'), ('page', '2')])
正如你所看到的,assigned_to_id 只2在最后。
我期待的是一個有序的字典
OrderedDict([('assigned_to_id', '2'),('assigned_to_id', '1'), ('client_id', '1'), ('client_id', '2'),('page', '2')])
也許對此有更好的方法,我對python有點陌生
我的最終目標是回傳一個帶有多個鍵的字典或任何可以在 urlencode 中使用的東西
uj5u.com熱心網友回復:
urllib.parse.urlencode
當使用雙元素元組序列作為查詢引數時,每個元組的第一個元素是鍵,第二個元素是值。value 元素本身可以是一個序列,在這種情況下,如果可選引數的
doseq計算結果為 True,則為鍵的 value 序列的每個元素生成由“&”分隔的單獨的 key=value 對。編碼字串中引數的順序將與序列中引數元組的順序匹配。
這是一個簡單的例子:
from urllib import parse
print(parse.urlencode({"a": [1, 2], "b": 1}, doseq=True))
# "a=1&a=2&b=1"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403010.html
標籤:
