2016-11-28 1 views
0

大きなボディ辞書で投稿要求を送信しようとするとスタックになってしまいます。 ここにコードがあります。本体の辞書がPythonで宣言されているときに、元の順序で要求本体を渡すことができます

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()を使って各キーと値のペアを宣言せずに、どのように正しく使うことができるのか分かりません。

ありがとうございました。

+0

私は質問本体:) – Juggernaut

+0

@AminEtesamian、おかげで、実際にそれがあるから、あなたの 'auth_token'値を削除する提案マシンが生成したトークンで、他の場所では使用できません。とにかくそれを変更しました。 – Feng

答えて

0

あなたは試すことがあります。

from collections import OrderedDict 

ordered_body = OrderedDict(body) 

を指定されているようordered_body内のキーの順序は同じままにしてください。私はthis postOrderedDictを非常にはっきりと説明していると思います。

+0

これは動作しません。 – Feng

+0

実際に動作します。何故なの? – Juggernaut

+0

@AminEtesamian、試しましたか?私がordered_bodyを印刷しようとすると、私はまだランダムな順序で結果を得ています。 – Feng

0

通常の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 
+0

実際に私は各キーとサブキーの値を指定したくありません。それは痛みになるでしょう。 – Feng

+0

実際に私はそれの背後にあるコンセプトについて説明していました。 mikeqfuの答えはより良い – Juggernaut

関連する問題