Note to self (pun intended): questo post rappresenta una sorta di appunto mentale per ricordarmi il funzionamento di setdefault
in Python, visto che puntualmente mi trovo ad utilizzarlo.
setdefault
è utilizzato sui dizionari (dict
) e permette di impostare una chiave di default durante una set. Mi spiego meglio con un esempio:
>>> D
{1: 'leonard', 2: 'sheldon', 3: 'wolowitz', 4: 'rajesh'}
Vediamo come funziona il metodo setdefault
:
>>> D.setdefault(1, 'penny')
'leonard'
>>> D
{1: 'leonard', 2: 'sheldon', 3: 'wolowitz', 4: 'rajesh'}
>>> D.setdefault(5, 'penny')
'penny'
>>> D
{1: 'leonard', 2: 'sheldon', 3: 'wolowitz', 4: 'rajesh', 5: 'penny'}
Ovvero, setdefault
valuta la chiave passata come primo argomento:
- se è già presente nel dizionario, viene ritornato il valore della chiave presente nel dizionario;
- altrimenti viene aggiunta al dizionario con il valore specificato come argomento.
in termini pythonici:
def setdefault(d, key, val):
if key in d:
return d[key]
else:
d[key] = val
Ora ho capito. In effetti, fino ad ora l’ho sempre fatto a mano :) perché non mi sono mai messo lì a capire bene Python.
Confermo l’impressione di Andrea, io lo uso principalmente come tool:
– processing di file di testo e aggiornamento di database
– interfaccia verso librerie in C che offrono binding in Python (OpenCV)
– rinominazione batch di file
Leggere questo post mi ha fatto venire voglia di imparare il Python, perché sento la mancanza nella mia cassetta degli attrezzi di un linguaggio snello e semplice. Mi sono messo a leggere le lezioni della Google Code University, per ora procede alla grande, sicuramente meglio di quanto non è successo con Ruby (che poi ho abbandonato)
@Michele, Vincenzo: la mia impressione è che Python sia un linguaggio molto flessibile e adatto alla prototipazione rapida. Confermate?
Esattamente, Python è un linguaggio adatto alla prototipazione rapida, ma non solo!
Ultimamente anche io sto usando molto python per fare processing di file di testo. Non mi era mai capitato di dover usare setdefault. Sai che, nonostante la tua spiegaazione, non ho ben capito a cosa serve…
A me è capitato di usarlo in contesti molto particolari di processing: in sintesi, codificavo l’istruzione condizionale che descrivo nel post:
se la chiave che si vuole inserire è già presente nel dizionario, viene ritornato il valore della chiave presente nel dizionario;
altrimenti viene aggiunta al dizionario con il valore specificato come argomento.
Di conseguenza, avere il metodo setdefault già pronto mi consente di risparmiare sia in termini di istruzioni che in termini di velocità (immagino che setdefault usi un modo più furbo di “key in dict” per testare se una chiave è già presente nel dict).