#python-3.x
#python-3.x
Вопрос:
У меня есть список:
my_list = ['2', '5', '7', '7', '5']
Мне нужно иметь возможность проверить, повторяется ли какой-либо элемент в списке X раз, и если да, то какой (и). Например, я хотел бы проверить, повторяются ли какие-либо (и какие) элементы (2) раза в приведенном выше списке, и в этом случае я ожидал бы:
5, 7 # this can be in the form of a list, strings, or anything else.
Что я пробовал:
Просмотрев некоторые предыдущие сообщения на StackExchange, я сначала пошел дальше и использовал collections-counter
(не уверен, что это хороший подход), вот так:
repetition = collections.Counter(my_list)
Что это возвращает, так это словарь, например:
{'5': 2, '7': 2, '2': 1}
Теперь мне все еще нужно проверить, какие элементы повторяются дважды. После еще нескольких поисков я закончил с этим:
def any(dict):
repeating = []
for element in dict.values():
if element == 2:
(...)
Однако я не уверен, как продолжить работу с этим кодом. Похоже, я могу получить только количество повторений в этом ‘2’ (т. Е. значение из словаря), но я не могу найти простой способ получения ключей, которые имеют значение 2.
Есть ли простой способ сделать это? Или мне следует попробовать другой подход?
Спасибо.
Ответ №1:
Вам нужно перебрать элементы словаря, чтобы у вас были и ключ, и значение:
repeating = [key for key, value in repetition.items() if value >= 2]
Здесь я использовал понимание списка для выполнения цикла; выбираются все ключи, имеющие значение 2 или выше.
ДЕМОНСТРАЦИЯ:
>>> from collections import Counter
>>> my_list = ['2', '5', '7', '7', '5']
>>> repetition = Counter(my_list)
>>> [key for key, value in repetition.items() if value >= 2]
['5', '7']
Комментарии:
1. Извините, один последующий вопрос. Если бы я хотел, чтобы код возвращал не только ключ, но и значение в словаре. Итак, вместо того, чтобы переходить
['5','7']
к вашей демонстрации, мы бы искали{('5':2),('7':2)]
; есть ли простой способ сделать это с пониманием списка?2. Думаю, я понял:
repeating = {repetition[key] for key, value in repetition.items() if value >= 2}
3. Хорошо, наконец-то понял:
{key: value for key, value in repetition.items() if value == 2}