I'm a newbie in python and would be acknowledge if somebody could shed
some light on associative arrays.
More precisely, I would like to create a multi-dimensional associative
array. I have for example a list of students which are identified
uniquely by their student IDs. Additionally, for each student I have
some information: FirstName, LastName, etc.
The array would have then the following form:
[StudentID] => [FirstName][LastName][Telephone]...[ ... ]
I would like to be able to access a field directly by using a
StudentID
[StudentID][FirstName]
[StudentID][LastName]
How could I manipulate such an array (create the array, add elements,
access data)?
Best wishes
Did you try the python tutorial? Dictionaries might be what you are
looking for.
http://docs.python.org/tutorial/datastructures.html#dictionaries
--
regards,
kushal
class Student:
def __init__(self, id, FirstName, ...):
self.id = id
self.FirstName = FirstName
...
then whenever you create a student object, use a dictionary to associate
the object with its is
AA = {} # An empty dictionary
s = Student(...)
AA[s.id] = s
... and repeat for many students...
Then to access a student's object given an id:
s = AA[id]
print s.id, s.FirstName, s.LastName, ...
I'd *not* call this a multi-dimension association, but rather just an
association between student objects and their ids.
Hope that helps,
Gary Herron
--
Gary Herron, PhD.
Department of Computer Science
DigiPen Institute of Technology
(425) 895-4418
Dear all,
Thanks for your suggestions, it worked! As Gary suggested, I created a
'student' class and mapped its objects to a dictionary.
Is it possible to sort the dictionary by the student's grades in
descending order?
Best wishes
Dictionaries are not ordered collections, so they themselves cannot be sorted.
However, if you want a list of students sorted in the manner you stated:
class_rank = list(garys_dictionary.values())
class_rank.sort(key=lambda student: student.grade, reverse=True)
Cheers,
Chris
--
http://blog.rebertia.com
> Is it possible to sort the dictionary by the student's grades in
> descending order?
You cannot sort dictionaries, but you can put dictionary items into a list
and then sort that.
Assumming that you have a dictionary student_dict that maps student IDs to
Student instances and a function get_grade() to find a student's grade you'd
do
def get_grade(student):
return course[student.student_id].grade # or whatever it takes
students_by_grade = sorted(student_dict.itervalues(), key=get_grade,
reverse=True)
for student in students_by_grade:
print student.first_name, student.last_name
However, problems like the above are normally handled best using a SQL
database, so I recommend that you have a look at
http://docs.python.org/library/sqlite3.html
Peter
I know this is not a direct answer, but in your case I would probably use
a database, because it is the easiest and most standardized way to access
such types of data. If you don't want something heavyweight, use sqlite
with in-memory databases/persistent file.
Look at sqlite3 module in python.
--
Harishankar (http://harishankar.org http://literaryforums.org)
You could also look at the September issue of the Python Rag which has a
couple of articles on storing a membership class using Shelve, which is
similar to what you are interested in:
http://www.pythonrag.org/