Python 如果我想将两个JSON元素放入新字典中,如何保持JSON的顺序
我想从一个网页上获取每个产品的ShopID和基于URL的价格。从JSON加载只包含两个JSON元素的有序字典。我传入load ORDERDEDDICT参数,并根据元素对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
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)