Python3: сравнение конкретной пары ключей и значений между двумя словарями - PullRequest
0 голосов
/ 07 октября 2018

РЕДАКТИРОВАТЬ: В случае, если это помогает с контекстом, я на самом деле пытаюсь обобщить это для циклов for и while, где я хотел бы, чтобы что-то подобное работало

if dictA[certainkey:'certainvalue'] == dictB[certainkey:'certainvalue']:
    return True

Оригинальный вопрос: Есть ли способ сравнить идентичные ключи в двух словарях в Python3, чтобы увидеть, имеют ли они одинаковые значения?

Например, скажем,

dictA = {1:'Y', 2:'E', 3:'E'}
dictB = {1:'Y', 2:'A', 3:'W'}

Я хочу, чтобы программа возвращала мне значение True, если определенный набор пар ключ-значение в dictA совпадает с тем же набором пар ключ-значение в dictB.В этом случае ключ 1 связан со значением «Y» как в dictA, так и в dictB.Я не знал, есть ли хорошие способы сделать это, поэтому я, естественно, попытался

print(dictA[1:'Y'] == dictB[1:'Y'])

в надежде напечатать мне Истину.Поскольку это не сработало (а я пока недостаточно знаю о словарях), мне было интересно, есть ли альтернативные способы сделать это.Спасибо!

Ответы [ 4 ]

0 голосов
/ 08 октября 2018

Вы можете просто сделать то, что вы упомянули в понимании списка

print([True if dicta[k] == dictb[k] else False for k in dicta])
# [True, False, False]

Расширенное

for k in dicta:
    if dicta[k] == dictb[k]:
        print(True)
    else:
        print(False)
0 голосов
/ 07 октября 2018

Вы можете объединить данные на равных парах (ключ, значение), а затем выполнить последующие проверки для объединенного слова.

>>> dictA = {1:'Y', 2:'E', 3:'E'}
>>> dictB = {1:'Y', 2:'A', 3:'W'}
>>> 
>>> merged = dict(dictA.items() & dictB.items())
>>> merged
{1: 'Y'}
>>> 
>>> 1 in merged
True
>>> 3 in merged
False

Создание merged безболезненно, поскольку возвращаемые значения dict.keys,dict.values и dict.items поддерживают интерфейс set в отношении таких операций, как объединение, пересечение и т. Д.

Предостережение: требует наличия хеш-значений в ваших диктовках.Если у вас есть неопределяемые значения, создайте merged через

>>> b_items = dictB.items()
>>> merged = dict(pair for pair in dictA.items() if pair in b_items)
0 голосов
/ 07 октября 2018
for key in dictA
    i = 0
    if key in dictA:
        word = dictA[0][i]
        if dictA[0][i] == dictB[0][0]:
            print(word + 'matches dict 0')
        if dictA[0][i] == dictB[0][1]:
            print(word + 'matches dict 1')
        if dictA[0][i] == dictB[0][2]:
            print(word + 'matches dict 2')
            i += 1

Я написал это очень быстро на шаттле с работы, он небрежный, и я мог сделать цикл для dictB.Но это должно работать для автоматизации процесса поиска слова.(Но может не сработать, потому что я написал это быстро)

0 голосов
/ 07 октября 2018

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

matching_keys = dictA.keys() & dictB.keys()

>>> {k: dictA[k] == dictB[k] for k in matching_keys}
{1: True, 2: False, 3: False}

Чтобы просто получить ключи, в которых значения совпадают, используйте понимание списка:

keys_with_matching_values = [k for k in matching_keys if dictA[k] == dictB[k]]
# Or: [k for k in dictA if k in dictA and dictA[k] == dictB[k]]

>>> keys_with_matching_values
[1]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...