A = {
'a': 1,
'b': 2,
'c': 3
}
B = {
'a': 1,
'b': 2,
'c': 3,
'd': 4
}
Mein Ziel ist es zu überprüfen, ob A ein "Unterwörterbuch" von B ist. Damit meine ich jedes Schlüsselpaar: Wert in A ist in B. Hier ist mein Versuch
def is_sub_dict(first_dict, second_dict):
for x in first_dict:
if x not in second_dict or first_dict[x] != second_dict[x]:
return False
return True
is_sub_dict(A, B) #True
is_sub_dict(B, A) #False
Gibt es einen besseren Weg, dies zu tun? Oder vielleicht eine pythonischere Art, weil dies sicher nicht so scheint.
3 Antworten
Erstellen Sie ein set
aus Diktat-Tupeln und testen Sie dann, ob die Menge eine Teilmenge der anderen Element-Tupel ist
def is_subset(A,B):
return set(A.items()).issubset(B.items())
Einmal erstellt, garantiert set
eine sehr schnelle Suche.
(Wenn der Vorgang mit demselben A
wiederholt werden muss, ist es besser, set(A.items())
für eine bessere Leistung "zwischenzuspeichern".)
Dies funktioniert, weil die Werte der Wörterbücher hashbar sind. Wenn dies nicht der Fall ist, ist die gute alte all(x in y for ...)
-Methode eine weitere Option (siehe andere Antworten).
Wie wäre es mit:
def is_subset(a, b):
return all(item in b for item in a)
Und dann einfach:
if is_subset(A.items(), B.items()):
# ...
Überprüfen Sie dies aus
all(item in B.items() for item in A.items())
Hoffe es wird dir helfen !!
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.