I have certain number of books which each have an author, title and ISBN number. How is the best way I can store this so that when I want a list of the books I will be able to list the books with the title, author and ISBN number?

I was thinking about using a list or dictionary but don't know how to do it.


8 Years
Discussion Span
Last Post by Ghostenshell

if you were to use lists you would have to have 3 seperate links and print all three when you want to view them or you could use a dictionary and a list or a ditionary with two of the peices of information grouped into one


You could easily make a class called Book and have a list of that. It could go:

class Book(object):
    def __init__(self):
        self.Title = name
        self.Author = author
        self.ISBN = ISBN

    def getAuthor(self,author):
        if author == self.Author:
            return self
            #you could have other such methods for ISBN and Title

books = []
b1 = Book("Marlie and Me","John Grogan",1234)
b2 = Book("The Northern Lights", "Phillip Pullman",4321)

for f in books:
    if f.getAuthor("Phillip Pullman"):
        print f.Title

I think that works.. i haven't put it into IDLE or anything, but generally classes are a very good way to go.


Using an SQLite database is the simpliest and best. It comes with Python and a tutorial is here http://www.devshed.com/c/a/Python/Using-SQLite-in-Python/

Yeah, SQLite is Ideal for that work. I advice you to take a leap. It is very simple and need no server (Zero config). Try it and you will enjoy. Here is a paper from www.python.org :

Here google results


Whatever you decide, jump in and try it. You will have to post some code if you want any specific help.


I have a bit of a problem increases the number of books in stock if the ISBN number is already in the dictionary. I am using the ISBN number as the Key then have a list with the Author, Title and Number in Stock in a list as the value attached to the key. How do you increase the stock if the ISBN is already in the dictionary?

booklist = {}

def addbook(ISBN, author, title, stock):

    if booklist.has_key(ISBN):

	stock = stock + 1


	booklist[ISBN] = [author, title, stock]

def listofbooks():

    for book in booklist:

	print booklist[book]

def findbook(ISBN):

    if booklist.has_key(ISBN):

	print booklist[ISBN]


	print "book not found"

addbook("1234", "Steven", "Book 1", 1)

addbook("2345", "Tom", "Book 2", 1)

addbook("1234", "Steven", "Book 1", 1)



You can change addbook like this

def addbook(ISBN, author, title, stock):
    if ISBN in booklist:
	booklist[ISBN][2] += stock
	booklist[ISBN] = [author, title, stock]

If you do not understand the shorthand version in Gribouillis' code, it is the same as

def addbook(ISBN, author, title, stock):
    if ISBN in bookdic:
        ## booklist[ISBN][2] += stock
        ISBN_list = bookdic[ISBN]   ## returns the list for this key
        print ISBN, ISBN_list
        ISBN_stock = ISBN_list[2]
        ISBN_stock += stock
        ISBN_list[2] = ISBN_stock
	bookdic[ISBN] = [author, title, stock]

As you can see, the original code is much simplier once you understand it.


Can someone explain how to add a file to a dictionary.
The file is simple. Maybe a word or a number on each line.
Here is the code I have. Didn't know if I should use this post or start a new one. Just in case I will start a new one.
Do not run the program i get an unusually long output

import random

def main():
    ##Open a file
    outfile = open('numbers.txt', 'w')
    for count in range(20):
        ##Get random numbers
        rebmun = random.randint(1,99)
        outfile.write(str(rebmun) + '\n')
    text = open('numbers.txt','r').read()
    muns = text.split()
    numbers = {}
    for ch in muns:
        numbers[ch] = numbers.values()
        print numbers
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.