У меня есть этот словарь:
dict = {'a': [1, 'Hello', 3], 'b': {1, 2, 90}, 'c': (1, 2, 'tuple'), 'd': 3}
Я пытался напечатать каждый ключ содержит значение 3. Выходные данные должны быть a
и d
Я устал что-то вроде этого:
[key for key, vals in dict.items() if 3 in vals]
Но ошибка: int не повторяется, я также пытался использовать для:
>>> for i in dict.values():
... if 3 in dict.values():
... print(i)
Я тоже пробовал это, но ничего не работает
>>> for i in dict.keys():
... if 3 in dict[i]:
... print(i)
ЧАСТЬ 2: Допустим, я могу напечатать ключ, если значение содержит 3, тогда как я могу получить индекс, если значением является список или кортеж?
5 ответов
[key for key, vals in dict.items() if 3==vals or 3 in vals]
Вы получаете ошибку, потому что не все ваши значения имеют одинаковый тип. Ваша оценка должна состоять в том, что если ключ равен 3, то возвращает true, или если значение является контейнером, проверьте, является ли 3 его частью.
Чтобы получить индекс значения в списке ИЛИ кортеже, вы можете использовать
>>> l = [1, 2, 'just', 3, 'p']
>>> l.index(3)
3
>>> t = (1, 2, 'word', 3)
>>> t.index(3)
3
>>>
Ваш код почти верен, просто проверьте, равен ли элемент или содержится в наборе значений:
dict = {'a': [1, 'Hello', 3], 'b': {1, 2, 90}, 'c': (1, 2, 'tuple'), 'd': 3}
print [key for key, vals in dict.items() if 3 == vals or 3 in vals]
['a', 'd']
Здесь у вас есть живой пример
Другой способ - проверить, не является ли значение ключа скалярным, прежде чем пытаться использовать in
:
def in_key(value, vals):
if isinstance(vals, (list, tuple, set)):
return value in vals
else:
return value == vals
lst = [key for key, vals in dict.items() if in_vals(3, vals)]
for k, v in dict.items():
try:
if 3 in v:
print(k)
except TypeError:
if v == 3:
print(k)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.