Tutorial sul dizionario Python: metodi, esempi e modelli comuni

  1. Home
  2. Blog
  3. Sviluppo software

Sviluppo software

Tutorial sul dizionario Python: Metodi, esempi e modelli comuni

I dizionari sono ovunque in Python, dalle risposte JSON alla configurazione. Impara come crearli, leggerli e aggiornarli, quindi raccogli i modelli di conteggio, raggruppamento e unione che utilizzerai su progetti reali.

9 min di lettura
Tutorial sul dizionario Python: metodi, esempi e modelli comuni

Punti chiave

  • Un dizionario Python memorizza coppie chiave-valore e cerca un valore in base alla sua chiave molto rapidamente.
  • Utilizzare get() quando potrebbe mancare una chiave, poiché le parentesi quadre sollevano KeyError.
  • Le chiavi devono essere hashable, come stringhe, numeri o tuple. Gli elenchi non possono essere chiavi.
  • copy() è poco profondo, quindi i dati nidificati rimangono condivisi a meno che non si utilizzi deepcopy.

Se un elenco è una riga di caselle numerate, un dizionario Python è un insieme di caselle etichettate. Chiedi ciò che desideri per nome anziché per posizione, motivo per cui i dizionari si trovano dietro i dati JSON, la configurazione, le cache e gran parte dello stesso Python.

Questo tutorial inizia con le nozioni di base e passa ai modelli che gli sviluppatori esperti utilizzano ogni giorno. Abbiamo eseguito tutti gli esempi su Python 3.13 e l’output mostrato proviene da quell’esecuzione.

Cos’è un dizionario?

Un dizionario, o dict, mappa chiavi a valori. Ciascuna chiave viene visualizzata solo una volta e i valori possono essere qualsiasi cosa, inclusi elenchi o altri dizionari.

Digitare Accesso tramite Ordinato Duplicati Meglio per
elenco Posizione Sì Consentito Sequenze
tupla Posizione Sì Consentito Record fissi
impostare Solo abbonamento No Non consentito Oggetti unici
dict Chiave Ordine di inserimento Le chiavi sono uniche Ricerche per nome

A partire da Python 3.7, i dizionari mantengono ufficialmente l’ordine di inserimento. Molti tutorial più vecchi li chiamano ancora non ordinati, il che non è più vero. Per un confronto più ampio tra gli altri tipi, vedere Elenco Python vs tupla vs set.

Le ricerche sono veloci perché i dizionari utilizzano una tabella hash. Il controllo di una chiave richiede all’incirca lo stesso tempo indipendentemente dal fatto che il dizionario contenga dieci elementi o un milione, mentre la ricerca di un elenco diventa più lenta man mano che cresce.

Crea un dizionario

user = {"name": "Asha", "age": 31, "city": "Pune"}

empty = {}
from_keywords = dict(name="Asha", age=31)
from_pairs = dict([("a", 1), ("b", 2)])

Le parentesi graffe sono la forma più comune. Una trappola: {} crea un dizionario vuoto, non un insieme vuoto. Per un set vuoto, è necessario set().

Leggere i valori in modo sicuro

Esistono due modi per leggere un valore e la differenza è importante quando una chiave potrebbe non esistere:

user["name"]                  # 'Asha'
user["email"]                 # KeyError: 'email'

user.get("email")             # None
user.get("email", "not set")  # 'not set'

Utilizzare le parentesi quadre quando la chiave deve esistere, in modo che una chiave mancante fallisca rumorosamente. Utilizzare get() quando l’assenza è normale, come un campo facoltativo in una risposta API. Per verificare la presenza di una chiave, utilizzare l’operatore in, che esamina le chiavi anziché i valori:

"city" in user    # True
"Pune" in user    # False

Aggiungi, aggiorna e rimuovi

L’assegnazione a una chiave la aggiorna se esiste o la aggiunge se non esiste:

user["age"] = 32
user["email"] = "asha@example.com"
print(user)

# {'name': 'Asha', 'age': 32, 'city': 'Pune', 'email': 'asha@example.com'}

Python offre diversi modi per rimuovere elementi:

user.pop("city")          # returns 'Pune' and removes it
user.pop("phone", None)   # no error if it is missing
del user["email"]         # removes it, and raises KeyError if missing
user.clear()              # empties the dictionary

Utilizzare pop() quando si desidera ripristinare il valore. Passare un valore predefinito come secondo argomento evita un errore quando la chiave non è presente. popitem() rimuove e restituisce la coppia aggiunta più recentemente.

Passa su un dizionario

Il looping ti dà direttamente le chiavi. Per ottenere sia chiavi che valori, utilizzare items():

user = {"name": "Asha", "age": 32}

for key, value in user.items():
    print(key, "=", value)

# name = Asha
# age = 32

keys(), values() e items() restituiscono visualizzazioni dal vivo anziché copie, quindi riflettono le modifiche successive. Non aggiungere o rimuovere chiavi durante il loop su un dizionario, perché Python solleva un RuntimeError. Passa su list(user) se necessario.

Suggerimento: Il controllo in su un dizionario è veloce, ma "Pune" in user.values() deve scansionare ogni valore. Se lo fai spesso con dati di grandi dimensioni, il tuo dizionario potrebbe essere digitato nel modo sbagliato.

Foglio informativo sui metodi del dizionario

Metodo Cosa fa
get(k, predefinito) Restituisce un valore o il valore predefinito se manca la chiave
keys() Restituisce una vista delle chiavi
values() Restituisce una visualizzazione dei valori
items() Restituisce una visualizzazione delle coppie chiave-valore
update(other) Aggiunge o sovrascrive da un altro dizionario
pop(k, predefinito) Rimuove una chiave e ne restituisce il valore
popitem() Rimuove e restituisce l’ultima coppia aggiunta
impostapredefinito(k, v) Restituisce il valore e inserisce prima v se manca la chiave
copy() Restituisce una copia superficiale
clear() Rimuove tutto
dict.fromkeys(chiavi, v) Costruisce un dizionario da un elenco di chiavi

Unisci dizionari

Un’esigenza comune è applicare le impostazioni dell’utente oltre a quelle predefinite. Quando le chiavi si scontrano, vince il lato destro:

defaults = {"theme": "light", "lang": "en"}
saved = {"theme": "dark"}

defaults | saved
{**defaults, **saved}

# Both give: {'theme': 'dark', 'lang': 'en'}

L’operatore | necessita di Python 3.9 o successivo, mentre la versione ** funziona anche su versioni precedenti. Entrambi creano un nuovo dizionario. Al contrario, defaults.update(saved) e defaults |= saved cambiano defaults al loro posto.

Comprensioni e ordinamento

Le comprensioni del dizionario creano un nuovo dizionario in un’unica riga leggibile, proprio come le comprensioni delle liste fanno per le liste:

prices = {"pen": 10, "book": 250, "bag": 900}

{k: v for k, v in prices.items() if v > 100}
# {'book': 250, 'bag': 900}

Per ordinare in base al valore, passare una funzione key a sorted(). Per trovare la chiave con il valore più grande, utilizzare max():

sorted(prices.items(), key=lambda item: item[1], reverse=True)
# [('bag', 900), ('book', 250), ('pen', 10)]

max(prices, key=prices.get)
# 'bag'

Un dizionario non ha un metodo sort() e sorted() restituisce un elenco di coppie. Racchiudi il risultato in dict() se vuoi un dizionario in quest’ordine.

Schemi di conteggio e raggruppamento

Due compiti si presentano costantemente. Il primo è il conteggio, che puoi eseguire utilizzando get() con il valore predefinito pari a zero:

words = "to be or not to be".split()

counts = {}
for word in words:
    counts[word] = counts.get(word, 0) + 1

print(counts)
# {'to': 2, 'be': 2, 'or': 1, 'not': 1}

La libreria standard lo rende ancora più breve con Counter:

from collections import Counter

Counter(words).most_common(2)
# [('to', 2), ('be', 2)]

Il secondo è il raggruppamento e defaultdict è l’ideale qui perché crea il valore mancante per te:

from collections import defaultdict

orders = [("Asha", 1200), ("Ben", 300), ("Asha", 800)]

by_customer = defaultdict(list)
for name, total in orders:
    by_customer[name].append(total)

print(dict(by_customer))
# {'Asha': [1200, 800], 'Ben': [300]}

Senza di esso, dovresti verificare se ogni chiave esiste prima di aggiungerla. Questi stessi modelli funzionano bene per l’aggregazione di dati API o righe di registro. Quando un dizionario è vuoto o manca una chiave, la nostra guida alla gestione delle eccezioni Python mostra come gestire il risultato KeyError.

Dati nidificati e copia trap

JSON si associa direttamente a dizionari ed elenchi nidificati, quindi spesso concatenate le chiavi. Il concatenamento get() lo mantiene al sicuro quando potrebbe mancare un livello:

response = {"user": {"profile": {"city": "Pune"}}}

response["user"]["profile"]["city"]               # 'Pune'
response.get("user", {}).get("settings", {}).get("theme")   # None

Fare attenzione quando si copiano dati nidificati. copy() duplica solo il livello superiore, quindi i dizionari interni rimangono condivisi con l’originale:

settings = {"db": {"host": "localhost"}}

shallow = settings.copy()
shallow["db"]["host"] = "prod"

print(settings["db"]["host"])
# prod

Cambiare la copia ha cambiato l’originale, il che può essere un brutto bug. Utilizzare copy.deepcopy(settings) per ottenere una copia completamente indipendente.

Quale può essere una chiave del dizionario?

Le chiavi devono essere hashable, che generalmente significa immutabili. Stringhe, numeri e tuple di valori immutabili funzionano tutti. Elenchi e dizionari non:

{["a"]: 1}

# TypeError: unhashable type: 'list'

Il motivo è che l’hash di una chiave decide dove viene archiviato il suo valore. Se una chiave potesse cambiare, Python non sarebbe più in grado di trovarla. Se hai bisogno di una chiave composta, usa una tupla, come {("Pune", 2026): 120}.

Errori comuni

  • Utilizzo di parentesi quadre sui tasti opzionali. Utilizza get() quando una chiave potrebbe essere assente.
  • Supponendo che get() significhi che la chiave esiste. None potrebbe significare mancante o None memorizzato. Utilizzare in quando la differenza è importante.
  • Utilizzando un’impostazione predefinita modificabile. dict.fromkeys(names, []) fornisce a ogni chiave lo stesso elenco. Usa invece una comprensione.
  • Modifica delle dimensioni durante l’iterazione. Effettua il loop su una copia delle chiavi.
  • Utilizzo di un dict per campi fissi e noti. Un dataclass può essere più chiaro e rileva errori di battitura nei nomi dei campi.

Considerazioni finali

I dizionari premiano un po’ di pratica. Ricordare get() per i tasti opzionali, items() per i loop e Counter e defaultdict per i due lavori più comuni. Per esercitarti, prendi un piccolo file JSON e scrivi il codice per contare e raggruppare i suoi record. Se non conosci il linguaggio, inizia con il nostro tutorial Python per principianti.

Domande frequenti

Cos’è un dizionario in Python?

Un dizionario è una raccolta integrata che memorizza coppie chiave-valore. Cerchi un valore tramite la sua chiave, il che è veloce anche con una grande quantità di dati.

I dizionari Python sono ordinati?

SÌ. A partire da Python 3.7, è garantito che i dizionari mantengano l’ordine in cui sono state inserite le chiavi. L’aggiornamento di una chiave esistente non ne modifica la posizione.

Qual è la differenza tra get() e parentesi quadre?

Le parentesi quadre sollevano KeyError quando manca una chiave. get() restituisce None, o un valore predefinito fornito, quindi si adatta alle chiavi facoltative.

Un dizionario può avere chiavi duplicate?

No. Ogni chiave è unica. L’assegnazione a una chiave esistente ne sostituisce il valore e, se un letterale ripete una chiave, prevale l’ultimo valore.

Come posso unire due dizionari in Python?

Utilizzare un | b su Python 3.9 o successivo, o {**a, **b} su versioni precedenti. Entrambi costruiscono un nuovo dizionario e i valori di b vincono quando le chiavi si scontrano.

Continua a imparare

Lavora con Stack Quora

Hai bisogno di aiuto con test, WordPress o SEO?

Aiutiamo i team a fornire software migliore e a far crescere i loro siti. Raccontaci a cosa stai lavorando e ti suggeriremo chiaramente il prossimo passo.

Continua a leggere

Altre guide su test, intelligenza artificiale e sviluppo moderno

Ti è piaciuto questo articolo? Scegli un argomento e passa direttamente ai nostri tutorial più recenti.

Intelligenza artificiale

Spiegazione delle allucinazioni dell'intelligenza artificiale: perché i modelli linguistici inventano le cose e come ridurle

Spiegazione delle allucinazioni dell'intelligenza artificiale: cosa sono, perché i modelli linguistici le producono, tipi comuni, come ridurle con b…

Leggi l'articolo →
DevOps

Spiegazione delle variabili d'ambiente: file .env, segreti e configurazione eseguiti correttamente

Variabili d'ambiente spiegate con esempi Python che abbiamo eseguito: lettura e impostazione, perché ogni valore è una stringa, file .env, ereditari…

Leggi l'articolo →
Sviluppo software

Spiegazione della limitazione della velocità API: algoritmi, intestazioni e gestione degli errori 429

La limitazione della velocità dell'API spiegata con una simulazione che abbiamo eseguito: bucket di token, finestra fissa, finestra scorrevole, risp…

Leggi l'articolo →
Automazione dei test

Derisione in Python: unittest.mock, patch e gli errori che fanno mentire i test

Mocking in Python con unittest.mock, testato: Mock e return_value, side_effect, patch dove viene utilizzato un nome, specifiche e autospec, date moc…

Leggi l'articolo →
Test del software

Spiegazione della copertura del codice: copertura di linea o di filiale e cosa significa realmente il 100%.

Copertura del codice spiegata con una vera esecuzione di cover.py: copertura di linea, ramo e condizione, lettura di un rapporto, perché la copertur…

Leggi l'articolo →
Database e SQL

DELETE vs TRUNCATE vs DROP in SQL: differenze, rollback e quando utilizzarli

DELETE vs TRUNCATE vs DROP spiegato con SQL testato: cosa rimuove, rollback, trigger, reimpostazione dell'identità, velocità e come differiscono Pos…

Leggi l'articolo →
Database e SQL

Spiegazione delle visualizzazioni SQL: crea, utilizza ed evita le insidie, con esempi

Viste SQL spiegate con le query che abbiamo eseguito: creazione di una vista, risultati in tempo reale, nascondere colonne, prestazioni, viste aggio…

Leggi l'articolo →
Sviluppo software

Interfaccia TypeScript e tipo: differenze reali, testate con il compilatore

Interfaccia TypeScript vs tipo, verificata con il vero compilatore: cosa possono fare entrambi, cosa può fare solo uno, fusione delle dichiarazioni,…

Leggi l'articolo →
Sviluppo software

Spiegazione di Python *args e **kwargs: funzioni flessibili con esempi chiari

Python *args e **kwargs spiegati con il codice che abbiamo eseguito: compressione e decompressione, ordine dei parametri, argomenti solo per parole …

Leggi l'articolo →
Sviluppo software

Funzioni Lambda Python: sintassi, usi reali e quando non usarli

Funzioni lambda Python spiegate con il codice che abbiamo eseguito: sintassi, ordinamento con chiave, mappa e filtro, chiusure, trap dell'associazio…

Leggi l'articolo →
Intelligenza artificiale

Cosa sono gli agenti AI? Come funzionano, con un semplice ciclo di agenti che puoi eseguire

Cosa sono gli agenti IA? Una semplice guida al ciclo dell'agente, agli strumenti, alla memoria e ai guardrail, con un piccolo ciclo Python che abbia…

Leggi l'articolo →
DevOps

Monitoraggio vs osservabilità: la vera differenza, con log, metriche e tracce

Spiegazione del monitoraggio e dell'osservabilità: errori noti e sconosciuti, log, metriche e tracce, una procedura dettagliata sugli incidenti di p…

Leggi l'articolo →
DevOps

Volumi Docker e montaggi di associazione: mantenere i dati del contenitore nel modo giusto

Volumi Docker e montaggi di collegamento spiegati: perché i dati del contenitore scompaiono, volumi denominati, montaggi di collegamento, tmpfs, ese…

Leggi l'articolo →
Automazione dei test

TDD vs BDD: differenze chiave, una caratteristica costruita in entrambi i modi e quando utilizzarli ciascuno

TDD vs BDD spiegato con una funzione di sconto costruita in entrambi i modi: refactoring rosso-verde con il codice che abbiamo eseguito, scenari "Da…

Leggi l'articolo →
Test del software

Test di accettazione da parte dell'utente (UAT): processo, lista di controllo ed esempi reali

Spiegazione del test di accettazione dell'utente: chi lo esegue, in cosa differisce dal QA, un processo in sette fasi, un modello di test case UAT, …

Leggi l'articolo →
Database e SQL

Spiegazione dei valori SQL NULL: IS NULL, COALESCE, NULLIF e le trappole da evitare

Valori SQL NULL spiegati con le query che abbiamo eseguito: logica a tre valori, IS NULL, COALESCE, NULLIF, come aggregazioni, join e ordinamento tr…

Leggi l'articolo →
Database e SQL

Istruzione SQL CASE WHEN: sintassi, esempi reali ed errori comuni

SQL CASE WHEN spiegato con le query che abbiamo eseguito: moduli semplici e cercati, ordine delle condizioni, pivot con SUM, trucchi COUNT, ordiname…

Leggi l'articolo →
Sviluppo software

Cos'è il JWT? Token Web JSON spiegati con un esempio funzionante

Cos'è il JWT? Spiegazione dei token Web JSON: le tre parti, un token creato e manomesso nel codice che abbiamo eseguito, JWT e sessioni, archiviazio…

Leggi l'articolo →
Sviluppo software

Spiegazione del loop di eventi JavaScript: stack di chiamate, microtask e timer con esempi

Il ciclo di eventi JavaScript spiegato con il codice che abbiamo eseguito: stack di chiamate, code di attività e microtask, perché setTimeout 0 non …

Leggi l'articolo →
Sviluppo software

Spiegazione dei generatori Python e del rendimento: risparmia memoria con esempi reali

Generatori Python e rendimento spiegati con il codice che abbiamo eseguito: come vengono messi in pausa e ripresi, misurato il risparmio di memoria,…

Leggi l'articolo →
Intelligenza artificiale

Cosa sono gli incorporamenti? I vettori e la somiglianza del coseno spiegati semplicemente

Cosa sono gli incorporamenti? Una guida in linguaggio semplice ai vettori, alla similarità del coseno e alla ricerca semantica, con un piccolo esemp…

Leggi l'articolo →
DevOps

Distribuzione blu-verde rispetto a quella canaria: differenze, compromessi e come scegliere

Spiegazione della distribuzione blu-verde e canary: come funziona ciascuna, costi, rischi e rollback, bucket utente stabile che abbiamo testato, mig…

Leggi l'articolo →
Automazione dei test

Test instabili: quali sono le cause e come risolverli definitivamente

Test instabili spiegati con demo che abbiamo eseguito: le cause principali, come confermarne e diagnosticarne uno, soluzioni adeguate per tempistich…

Leggi l'articolo →
Test del software

Test di carico e test di stress: differenze, metriche ed esempi k6

Spiegazione del test di carico e dello stress test: cosa dimostra ciascuno, test di picco e di assorbimento, le metriche che contano, perché le medi…

Leggi l'articolo →
Test del software

Caso di test e scenario di test: differenze chiave, esempi e quando utilizzarli

Spiegazione del caso di test e dello scenario di test: definizioni chiare, una tabella affiancata, una funzione di reimpostazione della password pre…

Leggi l'articolo →
Database e SQL

Ottimizzazione delle query SQL: leggi i piani di esecuzione e correggi query lente, con tempistiche

Ottimizzazione delle query SQL testata su un milione di righe: leggi i piani di esecuzione, aggiungi gli indici corretti, correggi filtri non aggior…

Leggi l'articolo →
Database e SQL

SQL UNION vs UNION ALL: differenze, esempi e prestazioni testate

SQL UNION vs UNION ALL spiegati con le query che abbiamo eseguito: duplicati, regole seguite da entrambi, un vero bug di dati, prestazioni misurate,…

Leggi l'articolo →
Sviluppo software

Tutorial sull'API di recupero JavaScript: GET, POST, gestione degli errori e timeout

Un tutorial sull'API JavaScript Fetch testato su un server locale: GET e POST, perché 404 non genera eccezioni, un helper riutilizzabile, stringhe d…

Leggi l'articolo →
Sviluppo software

Gestione dei file Python: lettura, scrittura, CSV, JSON e pathlib con esempi

Gestione dei file Python spiegata con il codice che abbiamo eseguito: modalità aperte, con, lettura di file di grandi dimensioni, CSV, JSON, pathlib…

Leggi l'articolo →
Sviluppo software

Classi e oggetti Python: tutorial OOP con esempi reali

Classi e oggetti Python spiegati con il codice che abbiamo eseguito: __init__, metodi, attributi di classe e istanza, ereditarietà, proprietà, metod…

Leggi l'articolo →
Intelligenza artificiale

Che cos'è un modello linguistico di grandi dimensioni? Come funzionano i LLM, spiegato senza esagerazioni

Cos’è un modello linguistico ampio? LLM spiegati in un linguaggio semplice: token, incorporamenti, attenzione, formazione, finestre di temperatura e…

Leggi l'articolo →
DevOps

Comandi Linux per principianti: la guida essenziale del terminale con esempi

Comandi Linux per principianti, raggruppati per attività: navigazione, file, visualizzazione log, grep, pipe, permessi, processi e archivi, con un e…

Leggi l'articolo →
Automazione dei test

Selenio vs drammaturgo: differenze chiave, codice a confronto e quale scegliere

Selenium vs Playwright a confronto: architettura, attesa, supporto per browser e linguaggio, debug, lo stesso test in entrambi gli strumenti, consig…

Leggi l'articolo →
Test del software

Partizionamento di equivalenza: tecnica di progettazione dei test spiegata con esempi pratici

Spiegazione del partizionamento di equivalenza: come trovare partizioni valide e non valide, esempi funzionanti per età, password e coupon, test che…

Leggi l'articolo →
Test del software

Gravità vs priorità nel test del software: differenze, matrice ed esempi reali

Spiegazione della gravità e della priorità nei test del software: definizioni chiare, una matrice a quattro vie con esempi, scale di livello, chi im…

Leggi l'articolo →
Database e SQL

Esercitazione sulle sottoquery SQL: tipi, sottoquery correlate ed EXISTS con esempi

Un tutorial sulle sottoquery SQL con le query che abbiamo eseguito: sottoquery scalari, IN, FROM e SELECT, sottoquery correlate, EXISTS, trap NOT IN…

Leggi l'articolo →
Database e SQL

Spiegazione di transazioni SQL e ACID: COMMIT, ROLLBACK e livelli di isolamento

Transazioni SQL e ACID spiegate con un bonifico bancario eseguito: COMMIT, ROLLBACK, punti di salvataggio, blocchi, livelli di isolamento, letture s…

Leggi l'articolo →
Sviluppo software

Cheat sheet dei comandi Git: i comandi che usi effettivamente, con esempi

Un cheat sheet dei comandi Git raggruppato per attività: configurazione, staging, rami, telecomandi, stash, cronologia ed errori di annullamento, co…

Leggi l'articolo →
Sviluppo software

Spiegazione delle promesse JavaScript: quindi, cattura, Promise.all ed errori comuni

Promesse JavaScript spiegate con il codice che abbiamo eseguito: stati, catene then e catch, gestione degli errori, Promise.all, allSettled, race an…

Leggi l'articolo →
Sviluppo software

Tutorial sul dizionario Python: metodi, esempi e modelli comuni

Un tutorial sul dizionario Python con il codice che abbiamo eseguito: creazione, lettura e aggiornamento di dettami, metodi chiave, unione, comprens…

Leggi l'articolo →
Intelligenza artificiale

Cos'è il RAG? La generazione aumentata di recupero spiegata con un esempio funzionante

Cos'è il RAG? La generazione aumentata di recupero viene spiegata passo dopo passo: indicizzazione, suddivisione in blocchi, incorporamenti, recuper…

Leggi l'articolo →
DevOps

Tutorial Terraform per principianti: infrastruttura come codice dal primo file ai moduli

Un tutorial su Terraform per principianti: inizia senza account cloud, impara init, pianifica e applica, quindi variabili, output, stato, moduli e u…

Leggi l'articolo →
DevOps

Docker vs Kubernetes: differenze chiave, come funzionano insieme e di cosa hai bisogno

Spiegazione di Docker vs Kubernetes: cosa fa ciascuno, la stessa app viene eseguita con entrambi, Docker Compose e Swarm a confronto, il dockershim …

Leggi l'articolo →
Automazione dei test

Tutorial Pytest per principianti: infissi, parametrizzazione ed esempi reali

Un tutorial pytest per principianti con test che abbiamo eseguito su pytest 9.2: asserzioni, dispositivi, parametrizzazione, conftest, marcatori, tm…

Leggi l'articolo →
Test del software

Ciclo di vita del test del software (STLC): 6 fasi, criteri di ingresso e uscita, esempio

Spiegazione del ciclo di vita del test del software: sei fasi STLC con criteri di ingresso e uscita, risultati finali, un esempio di funzionalità di…

Leggi l'articolo →
Sviluppo software

Git merge vs rebase: differenze, esempi e quando usare ciascuno

Git merge vs rebase spiegato con output reale del log, una tabella di confronto, la regola d'oro del rebase e un flusso di lavoro sicuro per i team.

Leggi l'articolo →
Sviluppo software

List comprehension in Python: sintassi, esempi e quando evitarla

List comprehension in Python spiegata: sintassi, filtri, if-else, cicli annidati, tempi misurati e i casi in cui un normale ciclo for è meglio.

Leggi l'articolo →
Database e SQL

SQL JOIN spiegati con esempi (Inner, Left, Right, Full)

Capisci i JOIN SQL passo dopo passo con tabelle e query di esempio: INNER, LEFT, RIGHT, FULL, CROSS e SELF, con errori comuni e consigli sulle prest…

Leggi l'articolo →