2010-07-26 11 views

Répondre

2

En supposant self.table est un dict, vous pouvez utiliser

self.table.setdefault(field,0) 

Les autres sont tous semblables. Notez que si self.table a déjà une clé field, la valeur associée à cette clé est renvoyée. Seulement s'il n'y a pas field clé est self.table[field] ensemble à 0.

Edit: Peut-être est plus proche de ce que vous voulez:

import collections 
class Foo(object): 
    def __init__(self): 
     self.CompleteAnalysis=collections.defaultdict(
      lambda: collections.defaultdict(list)) 

    def getFilledFields(self,sentence): 
     field, field_value, field_date = sentence.split('|') 
     field_value = field_value.strip('\n') 
     field_date = field_date.strip('\n') 
     self.CompleteAnalysis[field]['date'].append(field_date) 
     self.CompleteAnalysis[field]['value'].append(field_value) 

foo=Foo() 
foo.getFilledFields('A|1|2000-1-1') 
foo.getFilledFields('A|2|2000-1-2') 
print(foo.CompleteAnalysis['A']['date']) 
# ['2000-1-1', '2000-1-2'] 

print(foo.CompleteAnalysis['A']['value']) 
# ['1', '2'] 

Au lieu de garder une trace du comte, peut-être tout simplement prendre la longueur de la liste:

print(len(foo.CompleteAnalysis['A']['value'])) 
# 2 
+0

merci une autre requête, comment puis-je définir self.table [nomtable] [field] [count] = 0 – Jayanth

+1

Essayer quelque chose comme ça, mais ne fonctionne pas. : - (( getFilledFields def (auto, phrase): count = 0 date = [] valeur = [] champ = sentence.split ('|') [0] = field_value sentence.split ('| ') [1] .strip (' \ n ') field_date = phrase.split (' | ') [2] .strip (' \ n ') essayez: self.CompleteAnalysis [field] [count] = self .CompleteAnalysis [field] [count] + 1 sauf: self.CompleteAnalysis [field] [count] = 0 self.CompleteAnalysis [champ] [date] .append (champ_date) self.CompleteAnalysis [champ] [valeur] .append (field_value) – Jayanth

+0

Pourriez-vous ajouter à votre question à quoi ressemble un exemple de phrase et ce que vous voulez. CompleteAnalysis à ressembler après un appel à 'self.getFilledFields (phrase)'? J'ai une supposition mais je ne suis pas tout à fait sûr. – unutbu

0

C'est un oldie mais Goldie. Je suis venu chercher une réponse et j'ai pensé partager mon apprentissage. Je voulais résumer les actions de l'utilisateur par l'identifiant de l'écran, les mesures prises et la date de connexion. Ce prototype utilise l'édition Oracle XE, Python 3.5 (64 bits) et le paquetage pyodbc.

import pyodbc 

spam = {} 

sqlQuery = ' \ 
    SELECT actionexecutedon, screenid, eventtype \ 
    FROM bmx_production_history \ 
' 

connection= pyodbc.connect('dsn=XE;uid=hr;pwd=hr') 

try: 
     cursor = connection.cursor() 
     cursor.execute(sqlQuery) 
     records = cursor.fetchall() 
     for record in records: 

       spam.setdefault(record.SCREENID, {}) 

       spam[record.SCREENID].setdefault(record.EVENTTYPE, {}) 

       spam[record.SCREENID][record.EVENTTYPE].setdefault(record.ACTIONEXECUTEDON.strftime('%Y-%m-%d'), 0) 
       spam[record.SCREENID][record.EVENTTYPE][record.ACTIONEXECUTEDON.strftime('%Y-%m-%d')]+=1 

     print(spam) 

finally: 
     connection.close() 

n.b. la version de production pousse le résumé dans le moteur Oracle, - en utilisant la fonction GROUP pour compter le nombre d'actions par écran par jour - mais l'utilisation de dictionnaires imbriqués est encore (je pense) une réponse valide à la question qui peut être utiliser à un compagnon de voyage pour passer encore de cette façon. La chance.

Questions connexes