
In Python, i metodi keys() e items() dei dizionari dict possono essere usati per eseguire operazioni sugli insiemi su chiavi e coppie chiave-valore. Ad esempio, puoi generare un dizionario composto da elementi (chiavi e valori) comuni a più dizionari.
In questo articolo vengono descritti i seguenti contenuti.
- I metodi keys() e items() dict
- Estrai chiavi comuni a più dizionari: Intersezione e
- Estrai tutte le chiavi da più dizionari: Union |
- Estrarre le chiavi contenute in uno solo di più dizionari: Differenza simmetrica ^
Usa i seguenti due dizionari come esempi.
d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'b': 2, 'c': 4, 'd': 5}
I metodi keys() e items() dict
Il dizionario ha i metodi keys() e items().
keys() restituisce la vista delle chiavi, items() restituisce la vista delle tuple chiave-valore (chiave, valore).
print(list(d1.keys()))
# ['a', 'b', 'c']
print(type(d1.keys()))
# <class 'dict_keys'>
print(list(d1.items()))
# [('a', 1), ('b', 2), ('c', 3)]
print(type(d1.items()))
# <class 'dict_items'>
Sono rispettivamente dict_keys e dict_items e supportano operazioni sugli insiemi come set.
Il dizionario ha anche un metodo values che riporta una visualizzazione dei valori, ma le operazioni sugli insiemi non sono supportate perché i valori possono sovrapporsi.
Di seguito vengono mostrati esempi di operazioni sugli insiemi che utilizzano i metodi keys() e items().
Le chiavi comuni a più manuali possono essere estratte con il metodo keys() e l’operatore &.
intersection_keys = d1.keys() & d2.keys()
print(intersection_keys)
# {'c', 'b'}
Il risultato di un’operazione di set è di tipo set. Lo stesso vale per i seguenti esempi.
print(type(intersection_keys))
# <class 'set'>
Nel caso di items(), vengono estratti gli elementi con chiavi e valori in comune. Sono esclusi gli articoli con solo la chiave o solo il valore in comune.
intersection_items = d1.items() & d2.items()
print(intersection_items)
# {('b', 2)}
È possibile generare un nuovo dizionario passando un insieme di tuple (chiave, valore) (= il risultato dell’operazione di insieme di articoli()) a dict().
intersection_dict = dict(d1.items() & d2.items())
print(intersection_dict)
# {'b': 2}
print(type(intersection_dict))
# <class 'dict'>
Con | operatore.
union_keys = d1.keys() | d2.keys()
print(union_keys)
# {'d', 'a', 'b', 'c'}
Nel caso di items(), gli elementi con chiavi comuni ma valori differenti vengono estratti separatamente.
union_items = d1.items() | d2.items()
print(union_items)
# {('d', 5), ('c', 4), ('a', 1), ('b', 2), ('c', 3)}
Come in questo esempio, se sono presenti elementi con una chiave comune ma valori diversi, solo uno di essi viene mantenuto durante la generazione di un dizionario’insieme. Non è possibile specificare quale valore deve essere mantenuto.
union_dict = dict(d1.items() | d2.items())
print(union_dict)
# {'d': 5, 'c': 3, 'a': 1, 'b': 2}
Le chiavi contenute in uno solo dei più manuali possono essere estratte con l’operatore ^.
symmetric_difference_keys = d1.keys() ^ d2.keys()
print(symmetric_difference_keys)
# {'d', 'a'}
Nel caso di items(), come con | operatore, gli elementi con chiavi comuni ma valori diversi vengono estratti separatamente.
symmetric_difference_items = d1.items() ^ d2.items()
print(symmetric_difference_items)
# {('d', 5), ('c', 4), ('a', 1), ('c', 3)}
Come in questo esempio, se sono presenti elementi con una chiave comune ma valori diversi, solo uno di essi viene mantenuto durante la generazione di un dizionario’insieme. Non è possibile specificare quale valore deve essere mantenuto.
symmetric_difference_dict = dict(d1.items() ^ d2.items())
print(symmetric_difference_dict)
# {'d': 5, 'c': 3, 'a': 1}
Puoi anche usare l’operatore – per ottenere la differenza di set.
difference_keys = d1.keys() - d2.keys()
print(difference_keys)
# {'a'}
difference_items = d1.items() - d2.items()
print(difference_items)
# {('c', 3), ('a', 1)}
difference_dict = dict(d1.items() - d2.items())
print(difference_dict)
# {'c': 3, 'a': 1}