I'm trying to write a custom filter method that takes an arbitrary number of kwargs and returns a list containing the elements of a database-like list that contain those kwargs.
For example, suppose d1 = {'a':'2', 'b':'3'}
and d2
= the same thing. d1 == d2
results in True. But suppose d2
= the same thing plus a bunch of other things. My method needs to be able to tell if d1 in d2, but Python can't do that with dictionaries.
Context:
I have a Word class, and each object has properties like word
, definition
, part_of_speech
, and so on. I want to be able to call a filter method on the main list of these words, like Word.objects.filter(word='jump', part_of_speech='verb-intransitive')
. I can't figure out how to manage these keys and values at the same time. But this could have larger functionality outside this context for other people.
In Python 3, you can use dict.items()
to get a set-like view of the dict items. You can then use the <=
operator to test if one view is a "subset" of the other:
d1.items() <= d2.items()
In Python 2.7, use the dict.viewitems()
to do the same:
d1.viewitems() <= d2.viewitems()
In Python 2.6 and below you will need a different solution, such as using all()
:
all(key in d2 and d2[key] == d1[key] for key in d1)