Testowanie równości działa poprawnie tak dla dicts Pythonietestu jeśli DICT zawarte w dict
first = {"one":"un", "two":"deux", "three":"trois"}
second = {"one":"un", "two":"deux", "three":"trois"}
print(first == second) # Result: True
Ale teraz mój drugi DICT zawiera kilka dodatkowych przycisków, które chcę ignorować:
first = {"one":"un", "two":"deux", "three":"trois"}
second = {"one":"un", "two":"deux", "three":"trois", "foo":"bar"}
Czy istnieje prosty sposób sprawdzenia, czy pierwszy dyktat jest częścią drugiego dyktatu, ze wszystkimi jego kluczami i wartościami?
EDIT 1:
To pytanie podejrzewa się duplikatem How to test if a dictionary contains certain keys, ale jestem zainteresowany przetestowaniem kluczy i ich wartości. Użycie tych samych kluczy nie oznacza, że dwa dyktury są sobie równe.
EDIT 2:
OK, mam kilka odpowiedzi teraz za pomocą czterech różnych metod, a wszystkie z nich okazały się pracuje. Ponieważ potrzebuję szybkiego procesu, przetestowałem każdy na czas wykonania. Stworzyłem trzy identyczne dyktały z 1000 pozycji, klucze i wartości były losowymi ciągami o długości 10. Modele second
i third
otrzymały parę dodatkowych par klucz-wartość, a ostatni klucz dodatkowy w postaci third
otrzymał nową wartość. Tak więc, first
jest podzbiorem second
, ale nie z third
. Korzystanie z modułu timeit
10000 powtórzeń, mam:
Method Time [s]
first.viewitems() <=second.viewitems() 0.9
set(first.items()).issubset(second.items()) 7.3
len(set(first.items()) & set(second.items())) == len(first) 8.5
all(first[key] == second.get(key, sentinel) for key in first) 6.0
Domyślałem ostatnia metoda jest najwolniejsza, ale to na miejscu 2. Ale metoda 1 bije je wszystkie.
Dzięki za odpowiedzi!
możliwe duplikat [Jak sprawdzić, czy słownik zawiera pewne przyciski] (http://stackoverflow.com/questions/3415347/how-to-test-if-a-dictionary-contains-certain-keys) – tjati