Как удалить ключи-значения из словаря 1, которых нет в словаре 2, на основе общих ключей?

У меня есть два больших словаря, и оба словаря имеют одинаковые ключи (имя изображения) и имеют разные значения.

1-й диктант с именем train_descriptions, который выглядит так:

{'15970.jpg': 'Turtle Check Men Navy Blue Shirt',
 '39386.jpg': 'Peter England Men Party Blue Jeans',
 '59263.jpg': 'Titan Women Silver Watch',
 ....
 ....
 '1855.jpg': 'Inkfruit Mens Chain Reaction T-shirt'}

и второй дикт с именем train_features

{'31973.jpg': array([[0.00125694, 0.        , 0.03409385, ..., 0.00434341, 0.00728011,
         0.01451511]], dtype=float32),
 '30778.jpg': array([[0.0174035 , 0.04345186, 0.00772929, ..., 0.02230316, 0.        ,
         0.03104496]], dtype=float32),
 ...,
 ...,

 '38246.jpg': array([[0.00403965, 0.03701203, 0.02616892, ..., 0.02296285, 0.00930257,
         0.04575242]], dtype=float32)}

Длина обоих словарей следующая:

len(train_descriptions) это 44424 и len(train_features) это 44441

Как видите, длина train_description dict меньше длины train_features. train_features словарь содержит больше ключей-значений, чем train_descriptions. Как удалить из train_features словаря ключи, которых нет в train_description? Чтобы их длина была одинаковой.

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

Michael Butscher 27.11.2022 08:04
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
55
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Использование for loop

feat = train_features.keys()
desc = train_description.keys()
common = list(i for i in feat if i not in decc)

for i in common: del train_features[i]

Обновлено: см. ниже

Код выше работает. Но мы можем сделать это более эффективно, не преобразовывая dict_keys в список следующим образом:

for i in train_features.keys() - train_description.keys(): del train_features[i]

Когда python dict_keys вычитаются, он дает dict_keys необычных ключей. Первый код сначала преобразовывался в список, который не был ни эффективным, ни обязательным.

Я бы предпочел использовать понимание списка, чем конструктор list() плюс выражение генератора. Также перебор словаря основан на его ключах, нет необходимости в .keys(). .keys() полезен только тогда, когда вам нужно установить подобные операции.

S.B 27.11.2022 09:27

Вы имеете в виду так: for i in train_features.keys() - train_description.keys(): del train_features[i]

Prabhas Kumar 27.11.2022 10:09

просто pop() если не существует в другом dict.

for key in train_descriptions.keys():
    if key not in train_features.keys():
        train_features.pop(key)

Нет необходимости преобразовывать dict.keys() в список. Если он просто используется для цикла, мы можем передать его напрямую.

Prabhas Kumar 27.11.2022 11:35

Используйте xor, чтобы получить разницу между словарями

diff = train_features.keys() ^ train_descriptions.keys()
for k in diff:
    del train_features[k]

Другие вопросы по теме