Python: проверьте, является ли один словарь подмножеством другого более крупного словаря - PullRequest
78 голосов
/ 17 февраля 2012

Я пытаюсь написать собственный метод фильтра, который принимает произвольное число kwargs и возвращает список, содержащий элементы списка, похожего на базу данных, который содержит эти kwargs .

Например, предположим, d1 = {'a':'2', 'b':'3'} и d2 = одно и то же.d1 == d2 Результаты в True.Но предположим, что d2 = то же самое плюс куча других вещей.Мой метод должен быть в состоянии сказать, если d1 в d2 , но Python не может сделать это со словарями.

Контекст:

У меня есть класс Word, икаждый объект имеет такие свойства, как word, definition, part_of_speech и т. д.Я хочу иметь возможность вызывать метод фильтра в главном списке этих слов, например Word.objects.filter(word='jump', part_of_speech='verb-intransitive').Я не могу понять, как управлять этими ключами и значениями одновременно.Но это может иметь большую функциональность вне этого контекста для других людей.

Ответы [ 12 ]

0 голосов
/ 14 февраля 2019

Если вы не возражаете против использования pydash, там есть is_match, который делает именно это:

import pydash

a = {1:2, 3:4, 5:{6:7}}
b = {3:4.0, 5:{6:8}}
c = {3:4.0, 5:{6:7}}

pydash.predicates.is_match(a, b) # False
pydash.predicates.is_match(a, c) # True






0 голосов
/ 09 октября 2015

Эта функция работает для значений без хэширования.Я также думаю, что это ясно и легко читать.

def isSubDict(subDict,dictionary):
    for key in subDict.keys():
        if (not key in dictionary) or (not subDict[key] == dictionary[key]):
            return False
    return True

In [126]: isSubDict({1:2},{3:4})
Out[126]: False

In [127]: isSubDict({1:2},{1:2,3:4})
Out[127]: True

In [128]: isSubDict({1:{2:3}},{1:{2:3},3:4})
Out[128]: True

In [129]: isSubDict({1:{2:3}},{1:{2:4},3:4})
Out[129]: False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...