Skip to content

Operazioni di set su più chiavi di dizionario in Python

Python

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}