2016-05-04 7 views
0

здесь вид, который содержит словарь магазинов, который содержит следующую информацию какКак отсортировать список или словарь в django?

dictionary = [] 

     for store in stores: 
          store = Store.objects.get(StoreName=store) 
          ids = StoreProduct.objects.filter(product=productobj , store__StoreName=store).values_list('store__id' , flat=True).distinct() 
          price = StoreProduct.objects.filter(product=productobj , store__StoreName=store).values_list('price' , flat=True).first() 
          distance = StoreLocation.objects.user_store_distance(user_lat , user_long , store.storelocation.latitude , store.storelocation.longitude) 
          dictionary.append({ 'store' : store , 'ids' : ids , 'price' : price , 'latitude' : store.storelocation.latitude , 
               'longitude':store.storelocation.longitude , 'distance':distance}) 

         print dictionary 

         dictionary = sorted(dictionary, key=lambda x:x['distance']) 

         print dictionary 

А затем отображать вышеуказанные данные в таблице ..здесь является шаблоном

<table class="wrapper storetable" onload="showmore()"> 

        <tr class="text-center" id="tablehead"><td style="width: 70px"></td><td>Store Name</td><td>Price</td><td>Distance</td> 
        <td>Sort<br><select id="sort_table"><option>Relevance</option><option>Distance</option><option>Price</option></select></td></tr> 

        {% for item in ProductStores %}     
        <tr class="text-center"> 
         <td style="width: 70px; font-size:20px"><a href="#" data-lat="{{item.latitude}},{{item.longitude}}" data-toggle="modal" data-target="#myMapModal"><span class="glyphicon glyphicon-map-marker" aria-hidden="true"></span></a></td> 
         <td> 
          {{ item.store }} <br> {{ storeproduct.store.MallName }} 
         </td> 
         <td> Rs. {{ item.price }}</td> 
         <td>{{ item.distance}} Kms.</td> 

         <td> 
          <button class="button" type="Submit" id="addtocart" onclick="getCart(event,{{ product.id }} , {{ minId }})">ADD TO BAG</button> 
         </td> 
        </tr> 

        {% endfor %} 
       </table> 

Как я могу сортировать выше по цене и расстоянию? т.е. от низкой до высокой цены, а затем от низкого до высокого расстояния

вот несколько примеров данных, которые возвращают тот же результат после применения сортировки, который возвращает тот же результат.

[{'distance': '100.79', 'price': 2100L, 'ids': [1L], 'longitude': u'77.2090', 'latitude': u'28.6139', 'store': <Store: DOROTHY>}, {'distance': '91.71', 'price': 2100L, 'ids': [4L], 'lo 
ngitude': u'77.29275380000001', 'latitude': u'28.63642', 'store': <Store: Dorothy Perkins PV>}] 
[{'distance': '100.79', 'price': 2100L, 'ids': [1L], 'longitude': u'77.2090', 'latitude': u'28.6139', 'store': <Store: DOROTHY>}, {'distance': '91.71', 'price': 2100L, 'ids': [4L], 'lo 
ngitude': u'77.29275380000001', 'latitude': u'28.63642', 'store': <Store: Dorothy Perkins PV>}] 
+1

Что-то с отступом не чувствует себя хорошо. Вы действительно возвращаетесь с рендерингом после первой итерации? Во-вторых, dictionnary не поддерживает порядок. Я полагаю, вы хотите заказать словарь (ProductStores в данных), это правильно? –

+0

Вы можете просто использовать метод sorted(), который предоставляется базовой библиотекой Python. ex: отсортировано (словарь, ключ = лямбда x: x ["расстояние"]) – nanithehaddock

+0

возврат за пределы цикла да. –

ответ

1

Прежде всего, вы должны рассмотреть вопрос переименования переменных словаря к чему-то, что напоминает список. Теперь, я предполагаю, что вы хотите сортировать свой словарь по цене. Если это верно вы можете использовать следующие:

dictionary = sorted(dictionary, key=lambda x:x['price']) 

Это будет в порядке возрастания цены, чтобы сделать его по убыванию Используйте

dictionary = sorted(dictionary, key=lambda x:x['price'], reverse=True) 
+0

делает то же самое, что и для расстояния? –

+0

@AdityaSingh да просто замените цену с расстоянием –

+0

Ничего не происходит, я получаю тот же результат, что и перед сортировкой –

Смежные вопросы