2014-10-21 3 views
-4

У меня есть следующий код, и я хочу сортировать значение металла в порядке убывания, я могу позвонить каждому из них, используя имя еды. имя, которое я дал для него. например, если я хочу назвать значение платины, я могу использовать «platinum.valuePerBar», отметить, что у меня есть свой собственный объект, который называется RIT_object, и я могу поместить тип каждого аргумента в класс, как вы можете видеть в кодеКак сортировать числа по убыванию в python?

from rit_object import *   # rit_object class 

class Metal(rit_object): 
    """ 
    Represents a single metal type, composed of: 
    :slot name (str): The name of the metal 
    :slot totalBars (int): The total number of bars 
    :slot weightPerBar (int): The weight of a single bar 
    :slot valuePerBar (int): The value of a single bar 
    :slot valuePerWeight (float): The value per weight of the metal 
    :slot barsTaken (int): The number of bars added to the satchel 
    """ 

    __slots__ = ('name' , 'totalBars' , 'valuePerBar' , 'weightPerBar' , 'barsTaken') 
    _types = (str , int , int, int, float, int) 




def createMetal(name, totalBars, weightPerBar, valuePerBar): 
    """ 
    Create and return a new Metal object. 
    :param name (str): The name of the metal 
    :param totalBars (int): The total number of bars 
    :param weightPerBar (int): The weight of a single bar 
    :param valuePerBar (int): The value of a single bar 
    :return: A newly initialized Metal object 
    :rtype: Metal 
    """ 
    platinum = Metal("platinum", 1, 1000, 6, 0) 
    gold = Metal("gold", 1, 750, 5, 0) 
    rhodium = Metal("rhodium", 1, 500, 5, 0) 
    silver = Metal("silver", 1, 400, 4, 0) 

def sortMetalsByValuePerBar(metals): 
    """ 
    Sort the metals by value per bar using insertion sort. The list of 
    metals is modified in place to be ordered by value per bar. 
    :param metals (list of Metal): The list of metals 
    :return: None 
    :rtype: NoneType 
    """ 

Как я могу сортировать значение по убыванию?

+1

Вы просмотрели функцию python [sort] (https://wiki.python.org/moin/HowTo/Sorting)? – GWW

+0

Сортировка на месте 'def sortMetalsByValuePerBar (металлы): metals.sort (key = (lambda m: m.valuePerBar), reverse = True)'. Чтобы вернуть отсортированную копию 'def sortMetalsByValuePerBar (металлы): return sorted (металлы, key = (lambda m: m.valuePerBar), reverse = True)'. –

+0

это не работает:/ –

ответ

1

Попробуйте sorted с reverse параметром

sorted([1,2,3,4], reverse=True) 

Относится к вашей коде:

из коллекций импорт namedtuple

Metal = namedtuple('Metal', 'name, totalBars, weightPerBar, valuePerBar') 

platinum = Metal("platinum", 1, 1000, 100.23) 
gold = Metal("gold", 1, 750, 20.043) 
rhodium = Metal("rhodium", 1, 500, 10.93) 
silver = Metal("silver", 1, 400, 15.73) 

metals = [platinum, silver, gold, rhodium] 

# Sort by value in descending order 
metals = sorted(metals, key=lambda x:x.valuePerBar, reverse=True) 

for i in metals: 
    print i.name, i.valuePerBar 

[из]:

platinum 100.23 
gold 20.043 
silver 15.73 
rhodium 10.93 
+0

* Сортируйте металлы по значению на бар, используя сортировку вставки. Список из металлов изменен, чтобы его можно было заказать по значению на бар. * –

+0

Я хочу отсортировать эти товары: platinum = Metal ("platinum", 1, 1000, 6, 0) gold = Metal ("gold" , 1, 750, 5, 0) родий = металл ("родий", 1, 500, 5, 0) серебро = металл ("серебро", 1, 400, 4, 0) в порядке убывания НДС их значениеPerBar, которое является третьим элементом. –

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