Topic: [Dizionari]Sort  (Letto 2335 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Beppe

  • python sapiens
  • *****
  • Post: 672
  • Punti reputazione: 0
    • Mostra profilo
[Dizionari]Sort
« il: Luglio 20, 2007, 17:11 »
Come si esegue un sort su un dizionario?
Nello script viene creato a run time un db in SQLite ,inserita una tabella ed in questa alcuni dati.
Quindi vengono recuperati i dati e caricato un dizionario.
Da qui vengono presentate una serie di tecniche per eseguire il sort sulla key del dizionario...ma alla fine...beh questo ve lo lascio scoprire da soli...
P.S.
Tutto questo nasce dal fatto che mi stavo studiando il modo di popolare una wx.ListBox con un recordset e mi era venuto in mente di usare un dizionario...

#############################
# Module:   sortdict.py
# Author:   Beppe
# Date:     15/07/2007
# Version: 0.0.1
#
# Description: How to sort a dictionary..perhaps

import time
import sqlite3
import sys,traceback
from string import strip
from operator import itemgetter


print '*'*80
print '*'*80
print 'Tryning for connect to test.db database...'

conn = sqlite3.connect('test.db',isolation_level=None)

print 'Creating the cursor...'

cur = conn.cursor()

try:
    print 'Deleting the tbl_test...'
    cur.execute('DROP TABLE IF EXISTS tbl_test')
    print 'Creating the tbl_test...'
    cur.execute('''CREATE TABLE tbl_test
               (id_test INTEGER PRIMARY KEY,
                Name )''')
    print 'Insert some value...'
    cur.execute("""INSERT INTO tbl_test
              values (Null,'Paperino')""")
    cur.execute("""INSERT INTO tbl_test
              values (Null,'Pippo')""")
    cur.execute("""INSERT INTO tbl_test
              values (Null,'Pluto')""")
    cur.execute("""INSERT INTO tbl_test
              values (Null,'Clarabella')""")
    cur.execute("""INSERT INTO tbl_test
              values (Null,'Topolino')""")
    cur.execute("""INSERT INTO tbl_test
              values (Null,'Nonna Papera')""")
    cur.execute("""INSERT INTO tbl_test
              values (Null,'Gastone')""")
    cur.execute("""INSERT INTO tbl_test
              values (Null,'Paperone')""")
    cur.execute("""INSERT INTO tbl_test
              values (Null,'Rockerduck')""")
    cur.execute("""INSERT INTO tbl_test
              values (Null,'Emma')""")


except:
    excValue = str(sys.exc_value)
    excType = str(sys.exc_type)
    sys.stdout=open('log.txt','a')
    logTime = time.localtime(time.time())
    FormatlogTime = time.strftime("%d/%m/%Y %H:%M:%S", logTime)
    print 'Interceptor:',FormatlogTime,excValue,excType
   

print 'Executing a query to retrive data from tbl_test'
cur.execute('SELECT id_test ,Name FROM tbl_test')
print 'Creating an object with the recordset'
aRecordset = cur.fetchall()

print 'Creating an empty dictionary....aDictionary = {}'
aDictionary = {}


print """Loading the dictionary with the dataset retrive from the recordset
         using this instruction
       for x in aRecordset:
           value =((strip(str(x[0]))))
           key =(strip(str(x[1])))
           aDictionary [value] = key"""

for x in aRecordset:
    value =((strip(str(x[0]))))
    key =(strip(str(x[1])))
    aDictionary [value] = key
print '*'*80
print '*'*80
print
print

print 'Now I show the data in the table using a dictionary.'
print '*'*80
print 'This instruction...'
print 'for k, v in aDictionary.iteritems():print k, v '
print '...returns...'
print
for k, v in aDictionary.iteritems():
    print k, v
   
print '*'*80
print
print
print 'Now I try some instruction to sort the key of the dictionary .'
print
print
print '*'*80
print 'This instruction...'
print """sKey = aDictionary.keys()
         sKey.sort()
         for x in sKey:
             print "The key ",x," has this value ",aDictionary[x]  """
print '...returns...'
print
sKey = aDictionary.keys()
sKey.sort()
for x in sKey:
    print "The key ",x," has this value ",aDictionary[x]


print '*'*80
print 'This instruction...'
print """def sortedDictValues(adict):
            items = adict.items()
            items.sort()
            return [value for key, value in items]
         print sortedDictValues(aDictionary)"""
print '...returns...but doesn\'t show the key'
print
def sortedDictValues(adict):
    items = adict.items()
    items.sort()
    return [value for key, value in items]

print sortedDictValues(aDictionary)

print '*'*80
print 'This instruction...'
print """print sorted(aDictionary.items())
           uses a function retrive from
           module named operator from wich
           we import itemgetter"""
print '...returns...'
print
print sorted(aDictionary.items())

print
print
print
print """At last each attempt to sort a dicionary by the key
         is fails...what doyou think about this?"""

raw_input ("Press enter to close!")

Offline moaiamorfo

  • python sapiens
  • ***
  • amministratore
  • Post: 782
  • Punti reputazione: 2
  • premitore di tasti e muovitore di mouse
    • Mostra profilo
    • Antonio Fittipaldi - docente MIUR e analista programmatore - Policoro (Matera)
Re: [Dizionari]Sort
« Risposta #1 il: Luglio 21, 2007, 18:13 »
questo documento potrebbe esserti utile. :)

saluti

Offline Beppe

  • python sapiens
  • *****
  • Post: 672
  • Punti reputazione: 0
    • Mostra profilo
Re: [Dizionari]Sort
« Risposta #2 il: Luglio 21, 2007, 18:40 »
C'è già nello script :)

sKey = aDictionary.keys()
sKey.sort()
for x in sKey:
    print "The key ",x," has this value ",aDictionary[x]

ma non va uguale...che mi sfugge?