【问题标题】:How can i pass the requests body in the original order when the body dictionary is declared in python在 python 中声明正文字典时,如何按原始顺序传递请求正文
【发布时间】:2016-11-28 19:04:12
【问题描述】:

当我尝试使用大型正文字典发送发布请求时,我遇到了困难。 这是代码。

body = {"session":{"user":{"user_id":"user1"}, \
"equipment":{"equipment_id_alternate":{"alternate_equipment_id_type":"sms_address", \
"alternate_equipment_id":"equipmentid1"}, \
"extensions":[{"extension_type":"string","name":"device_type","value":"PC_Apple"}, \
{"extension_type":"string","name":"device_id", \
"value":"equipmentid1"}]}, \
"content":{"content_type":"http_broadcast_channel", \
"uri":"http://xyz/abc.m3u8", \
"extensions":[{"extension_type":"integer","name":"bandwidth","value":0}, \
{"extension_type":"string","name":"stream_quality","value":"HD"}, \
{"extension_type":"string","name":"session_type","value":"Live_Linear_Companion"}]}}, \
"sa_version":"sa_http_v_1_0_1","request_type":"setup_request", \
"authentication":{"auth_algorithm":"sa_hmac_token_v_1_0_1","auth_message_algorithm":"sa_http_auth_message_v_1_0_1", \
"auth_token_start":"2016-11-23T19:49:56Z","auth_token_expiry":"2016-11-30T19:49:56Z", \
"auth_token":"abdcwgegegegege"}}

header19 = {some keys and values}
api19 = requests.post(url19, json=body, headers=header19)

我想按照声明的顺序传递请求体,我该如何实现?

我看到很多类似的问题和回复说你可以使用 collections.orderDict();但是,如果不使用 collections.orderDict() 声明每个键和值对,我不知道如何正确使用它。

谢谢。

【问题讨论】:

  • 我建议从问题正文中删除您的 auth_token 值:)
  • @AminEtesamian,谢谢,实际上这是机器生成的令牌,不能在其他任何地方使用。还是改了。

标签: python json dictionary python-requests


【解决方案1】:

普通的 dict 不跟踪插入顺序,并且迭代它会产生任意顺序的值。相比之下,在 OrderedDict 中,插入项目的顺序会被记住并在创建迭代器时使用。

import collections


print 'Regular dictionary:'
d = {}
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'
d['d'] = 'D'
d['e'] = 'E'

for k, v in d.items():
   print k, v

print '\nOrderedDict:'
d = collections.OrderedDict()
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'
d['d'] = 'D'
d['e'] = 'E'


for k, v in d.items():

 print k, v

输出将是:

Regular dictionary:
a A
c C
b B
e E
d D

OrderedDict:

a A
b B
c C
d D
e E

【讨论】:

  • 实际上我不想为每个键和子键指定值。那会很痛苦。
  • 其实我是在解释它背后的概念。 mikeqfu 的答案更好
【解决方案2】:

你可以试试:

from collections import OrderedDict

ordered_body = OrderedDict(body)

ordered_body 中的键顺序应与指定的相同。我认为this post 非常清楚地解释了OrderedDict

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
相关资源
最近更新 更多