Python Forum
Organizing list of objects by attribute
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Organizing list of objects by attribute
#2
To sort by an attribute, you can use the sorted() built-in function.

As for the code, I have a couple recommendations. You already have a commented out implementation of a better Card so I would get rid of the first one and the setter methods. You'll see why in a moment. Also, instead of Card.identify_card(), make use of the __str__() and __repr__() dunder methods (this is more advanced, but the implementation is easy and you can learn something new!). These methods work with the print() function to provide a custom output for each instance.

class Card:
 
    def __init__(self, suit, value):
        self.value = value
        self.suit = suit
     
    def getvalue(self):
        return(self.value)
     
    def getsuit(self):
        return(self.suit)
         
    def __str__(self):
        return self.getvalue() + " of " + self.getsuit()

    def __repr__(self):
        return self.__str__()
With those changes, we can make an improvement to Deck.initialize_deck(). First, give it the same treatment with Deck.__init__() to pass in the suits and values - this makes the Deck more versatile. Then, use a list comprehension (again, more advanced) to make the cards. List comprehensions are faster than loops and more pythonic. Then, add method calls to Deck.initialize_deck() and Deck.shuffle_deck() to Deck.__init__() so it's ready for dealing as soon as it's initialized.

import random
from Card import Card

class Deck:
    def __init__(self, suits, values):
        self.deck_of_cards=[]
        self.suits = suits
        self.values = values
        self.initialize_deck()
        self.shuffle_deck()
                          
    def initialize_deck(self):
        self.deck_of_cards = [Card(s, v) for s in suits for v in values]

    def shuffle_deck(self):
        random.shuffle(self.deck_of_cards)
         
    def draw_card(self):
        return self.deck_of_cards.pop()
     
    def load_card(self, temp_card):
        self.deck_of_cards.append(temp_card)
Reply


Messages In This Thread
RE: Organizing list of objects by attribute - by stullis - Mar-06-2020, 03:20 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Organizing several similar classes with overlapping variables 6hearts 7 1,689 May-07-2023, 02:00 PM
Last Post: 6hearts
  Creating list of lists, with objects from lists sgrinderud 7 1,887 Oct-01-2022, 07:15 PM
Last Post: Skaperen
Question Keyword to build list from list of objects? pfdjhfuys 3 1,765 Aug-06-2022, 11:39 PM
Last Post: Pedroski55
  AttributeError: 'list' object has no attribute 'upper' Anldra12 4 5,300 Apr-27-2022, 09:27 AM
Last Post: Anldra12
  How to store the resulting Doc objects into a list named A xinyulon 1 2,012 Mar-08-2022, 11:49 PM
Last Post: bowlofred
  AttributeError: 'list' object has no attribute 'values' ilknurg 4 15,555 Jan-19-2022, 08:33 AM
Last Post: menator01
  Grouping and sum of a list of objects Otbredbaron 1 3,443 Oct-23-2021, 01:42 PM
Last Post: Gribouillis
  Passing List of Objects in Command Line Python usman 7 3,431 Sep-27-2020, 03:45 PM
Last Post: ndc85430
  How to create and define in one line a 2D list of class objects in Python T2ioTD 1 2,194 Aug-14-2020, 12:37 PM
Last Post: Yoriz
  How do I get attribute XPATHs list ? MDRI 3 3,106 Jun-24-2020, 07:28 AM
Last Post: snippsat

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020