У меня есть форма html, которая принимает параметры, а затем приложение python (flask), которое сортирует файл json перед возвратом результатов. Это прекрасно работает, за исключением нескольких записей, где Цена не числовая, а строка (в частности, «Call for Price»).
sortparam=request.form["inputsearch"]
if sortparam == 'Location':
keyparam = lambda s: s['Location']
elif sortparam == 'Price':
keyparam = lambda s: int(s['Price'].replace(',', ''))
elif sortparam == 'Size':
keyparam = lambda s: s['Size']
with open("output/boatlist.json", "r") as jdata:
data = json.load(jdata)
data['boats'].sort(key=keyparam)
Вот пример json:
"boats": [
{
"Name": "Lagoon 46",
"Price": "Call For Price",
"Size": "46 ft / 2020",
"Location": "Vancouver, British Columbia, Canada"
},
{
"Name": "Lagoon 42",
"Price": "790,000",
"Size": "42 ft / 2021",
"Location": "Vancouver, British Columbia, Canada"
},
{
"Name": "Leopard 40",
"Price": "560,000",
"Size": "40 ft / 2016",
"Location": "Victoria, British Columbia, Canada"
}
]
На данный момент я решил эту проблему, просто заменив все «Call For Pricing» на «0» при построении json, но мне было интересно, есть ли элегантный способ сортировки их до конца список.