Python 如果我想将两个JSON元素放入新字典中,如何保持JSON的顺序

Python 如果我想将两个JSON元素放入新字典中,如何保持JSON的顺序,python,json,Python,Json,我想从一个网页上获取每个产品的ShopID和基于URL的价格。从JSON加载只包含两个JSON元素的有序字典。我传入load ORDERDEDDICT参数,并根据元素对json加载进行排序。我做了以下操作,但最后的命令不符合顺序。还有别的办法吗 mystr = [{"id":36887154,"final_price":1986.05,"payment_method_cost":"\\u003cem\\u003e+ 3,00 €\\u003c/em\\u003e \\u003cspan\\u00

我想从一个网页上获取每个产品的ShopID和基于URL的价格。从JSON加载只包含两个JSON元素的有序字典。我传入load ORDERDEDDICT参数,并根据元素对json加载进行排序。我做了以下操作,但最后的命令不符合顺序。还有别的办法吗

mystr = [{"id":36887154,"final_price":1986.05,"payment_method_cost":"\\u003cem\\u003e+ 3,00 €\\u003c/em\\u003e \\u003cspan\\u003eΑντικαταβολή\\u003c/span\\u003e","net_price":1983.05,"net_price_formatted":"1.983,05 €","final_price_formatted":"1.986,05 €","shop_id":514,"no_credit_card":false,"sorting_score":[-4.8549,-340,-83,514,40],"shipping_cost":"\\u003cem\\u003e+ 0,00 €\\u003c/em\\u003e \\u003cspan\\u003eΜεταφορικά\\u003c/span\\u003e","link":"/products/show/36887154"},{"id":37336259,"final_price":1825.0,"payment_method_cost":"\\u003cem\\u003e+ 2,00 €\\u003c/em\\u003e \\u003cspan\\u003eΑντικαταβολή\\u003c/span\\u003e","net_price":1819.0,"net_price_formatted":"1.819,00 €","final_price_formatted":"1.825,00 €","shop_id":597,"no_credit_card":false,"sorting_score":[-4.71702,-57,-95,597,40],"shipping_cost":"\\u003cem\\u003e+ 4,00 €\\u003c/em\\u003e \\u003cspan\\u003eΜεταφορικά\\u003c/span\\u003e","link":"/products/show/37336259"}]

 fp = urllib.request.urlopen(url2besearched)
 mybytes = fp.read()
 mystr = mybytes.decode("utf8")
 fp.close()
 mystr = mystr.rsplit('=')
 mystr = mystr[1].split(";")
 mystr = mystr[0]


 if mystr.endswith("]"):
        json_str = json.loads(mystr, object_pairs_hook=OrderedDict)
        #sort json list
        json_str.sort(key=lambda s: s['final_price'])
        #get first
        spid = json_str[0]['shop_id']
        fprice = json_str[0]['final_price']
 else:
        mystr = json.dumps(mystr)
        json_str = json.loads(mystr, object_pairs_hook=OrderedDict)
        json_str.sort(key=lambda s: s['final_price'])
        #get first
        spid = json_str[0]['shop_id']
        fprice = json_str[0]['final_price']

i =0
json_dict = OrderedDict()    
for i in range(len(json_str)):
    key = json_str[i]["shop_id"]
    value = json_str[i]["final_price"]
    json_dict.update( {key : value} )
我想在最终价格的基础上,以升序获得一个商店id和最终价格的有序字典,但我有两个主要问题

json_dict不正常
我从mystr得到的错误是,这个str没有属性sort

OrderedDict
用于保持条目的添加顺序。这里您不需要,您需要根据最终价格对字典进行排序:

payments = json.loads(mystr)
final_prices = sorted([
    (payment['shop_id'], payment['final_price'])
    for payment in payments
], key=lambda payment: payment[1])
如果出于某种原因,您仍然需要从中获得一个
OrderedDict
,您可以使用:

OrderedDict(final_prices) 

OrderedDict
用于保持条目的添加顺序。这里您不需要,您需要根据最终价格对字典进行排序:

payments = json.loads(mystr)
final_prices = sorted([
    (payment['shop_id'], payment['final_price'])
    for payment in payments
], key=lambda payment: payment[1])
如果出于某种原因,您仍然需要从中获得一个
OrderedDict
,您可以使用:

OrderedDict(final_prices)