Dizionari e set in Python
Esplori la creazione di dict e set, i test di appartenenza e schemi comuni come il conteggio delle frequenze con collections.Counter
Dizionari e set in Python è una lezione DSA Interview Prep gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento DSA Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso DSA Interview Prep include 4 lezioni in totale.
Dict Python: archivi chiave-valore
Un dict di Python associa le chiavi ai valori, con ricerche, inserimenti e cancellazioni mediamente O(1). È alla base di two-sum, dei controlli degli anagrammi e del conteggio delle frequenze. Il codice lo mostra in pratica.
d = {'apple': 3, 'banana': 5}
print(d['apple']) # 3
d['cherry'] = 7
print(len(d)) # 3
print('banana' in d) # True
del d['apple']
print(d) # {'banana': 5, 'cherry': 7}Ricerca sicura con .get()
Leggere una chiave mancante con d[key] genera un KeyError. Usi d.get(key, default) per restituire invece un valore di fallback: è una buona abitudine che evita errori di runtime imprevisti.
freq = {}
words = ['the', 'cat', 'sat', 'on', 'the', 'mat']
for w in words:
freq[w] = freq.get(w, 0) + 1
print(freq)
# {'the': 2, 'cat': 1, 'sat': 1, 'on': 1, 'mat': 1}
print(freq.get('dog', 0)) # 0 (no KeyError)defaultdict per raggruppare più facilmente
defaultdict(list) crea automaticamente una list vuota per ogni nuova chiave, eliminando il codice ripetitivo dei problemi di raggruppamento. defaultdict(int) inizializza ogni chiave a 0, facilitando il conteggio.
from collections import defaultdict
groups = defaultdict(list)
words = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
for w in words:
key = ''.join(sorted(w)) # canonical anagram key
groups[key].append(w)
print(list(groups.values()))
# [['eat','tea','ate'], ['tan','nat'], ['bat']]Counter: mappe rapide delle frequenze
Counter è un dict pensato per il conteggio: gli passi qualsiasi iterabile e ottieni immediatamente una mappa delle frequenze. most_common(k) restituisce i primi k elementi. Il codice mostra un controllo degli anagrammi.
from collections import Counter
c = Counter('abracadabra')
print(c) # Counter({'a':5,'b':2,'r':2,'c':1,'d':1})
print(c.most_common(2)) # [('a', 5), ('b', 2)]
# Valid anagram check
def is_anagram(s, t):
return Counter(s) == Counter(t)
print(is_anagram('anagram', 'nagaram')) # TrueSet Python: raccolte non ordinate di elementi unici
Un set contiene elementi unici e consente verifiche di appartenenza in O(1). Usi {1, 2, 3} o set(iterable); tuttavia, {} crea un dict, quindi per un set vuoto usi set(). È ottimo per individuare i duplicati.
seen = set()
nums = [1, 2, 3, 2, 1, 4]
duplicates = []
for n in nums:
if n in seen: # O(1) check
duplicates.append(n)
seen.add(n)
print(duplicates) # [2, 1]
print(len(seen)) # 4 (unique values)Operazioni sui set nei colloqui tecnici
I set consentono operazioni matematiche: | unione, & intersezione, - differenza, ^ differenza simmetrica. Queste operazioni risolvono in una riga i problemi del tipo «elementi comuni».
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b) # {1, 2, 3, 4, 5, 6} union
print(a & b) # {3, 4} intersection
print(a - b) # {1, 2} difference
print(a ^ b) # {1, 2, 5, 6} symmetric diffVerifica di appartenenza: list o set
La struttura scelta cambia la velocità. Verificare in su una list costa O(n), mentre su un set costa O(1). Convertire una list in un set prima di eseguire ricerche ripetute è un'ottimizzazione comune.
word_list = ['apple', 'banana', 'cherry', 'date']
word_set = set(word_list)
# O(n) per check
print('banana' in word_list) # True
# O(1) per check
print('banana' in word_set) # True
# Practical example: find common elements
a = [1, 2, 3, 4, 5]
b = [3, 4, 5, 6, 7]
common = [x for x in a if x in set(b)]
print(common) # [3, 4, 5]Iterare sui dict: chiavi, valori ed elementi
Scorra un dict con .keys(), .values() o .items(). Non elimini mai chiavi durante il ciclo: le raccolga prima in una list e le elimini in seguito. Veda il codice.
scores = {'Alice': 90, 'Bob': 75, 'Carol': 88}
for name, score in scores.items():
print(f'{name}: {score}')
# Find key with max value
best = max(scores, key=scores.get)
print(best) # Alice
# Safe deletion
to_del = [k for k, v in scores.items() if v < 80]
for k in to_del:
del scores[k]
print(scores) # {'Alice': 90, 'Carol': 88}Frozenset: set hashable
Un frozenset è un set immutabile, quindi può essere una chiave di un dict o trovarsi all'interno di un altro set. È utile per raggruppare gli anagrammi in base all'insieme delle loro lettere quando l'ordine non conta.
from collections import defaultdict
words = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
groups = defaultdict(list)
for w in words:
key = frozenset(w) # hashable; 'eat','tea','ate' all share same key
groups[key].append(w)
print([sorted(g) for g in groups.values()])
# [['ate','eat','tea'], ['nat','tan'], ['bat']]Dict comprehension per le trasformazioni
Le dict comprehension costruiscono una mappatura in una riga: {k: v for ...}. Sono ottime per invertire un dict o filtrare coppie. Attenzione: l'inversione presuppone che i valori siano unici. Veda il codice.
# Invert a dict
original = {'a': 1, 'b': 2, 'c': 3}
inverted = {v: k for k, v in original.items()}
print(inverted) # {1:'a', 2:'b', 3:'c'}
# Filter by value
scores = {'Alice': 90, 'Bob': 55, 'Carol': 78}
passing = {k: v for k, v in scores.items() if v >= 60}
print(passing) # {'Alice': 90, 'Carol': 78}La sequenza consecutiva più lunga
I set risolvono il problema della sequenza consecutiva più lunga in O(n): inserisca tutti i numeri in un set, poi conti in avanti solo a partire dai numeri il cui predecessore non è presente. Non serve ordinare.
def longest_consecutive(nums):
num_set = set(nums)
best = 0
for n in num_set:
if n - 1 not in num_set: # start of sequence
cur = n
streak = 1
while cur + 1 in num_set:
cur += 1
streak += 1
best = max(best, streak)
return best
print(longest_consecutive([100,4,200,1,3,2])) # 4 (1,2,3,4)Verifica rapida
Verifica rapida: vediamo quanto sono rimaste impresse le idee su dict e set di questa lezione. Si fidi del suo intuito. 🎯
Riepilogo della lezione
Riepilogo: i dict offrono ricerche O(1) per conteggio e raggruppamento, Counter e defaultdict eliminano il codice ripetitivo e i set trasformano scansioni O(n) in verifiche O(1).
Domande Frequenti
La lezione «Dizionari e set in Python» è gratuita?
Sì — il testo completo di «Dizionari e set in Python» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso DSA Interview Prep, passa a CoddyKit PRO. Il corso DSA Interview Prep include 4 lezioni in totale.
Cosa imparerò in «Dizionari e set in Python»?
Esplori la creazione di dict e set, i test di appartenenza e schemi comuni come il conteggio delle frequenze con collections.Counter Eserciti DSA Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare DSA Interview Prep?
Non è richiesta alcuna esperienza precedente. DSA Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Dizionari e set in Python»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione DSA Interview Prep?
Sì. Ogni lezione DSA Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Liste, tuple e slicing
- Dizionari e set in Python
- Comprehension e funzioni built-in
- Funzioni, closure e lambda