Как вернуть словарь значений из списка?

Как отредактировать закомментированный фрагмент кода, чтобы он возвращал словарь повторяющихся чисел, а не возвращал {}?

listOfElems = ["a", "c", "c"]

def checkIfDuplicates_3(listOfElems):
  duplicates = {}
  for x in listOfElems:
#    duplicates = ??
    if listOfElems.count(x) > 1:
      return duplicates
  return duplicates

#test 
test = [listOfElems]

for t in test:
  output = checkIfDuplicates_3(t)
  print("The duplicate in", t, "is", output)

person saturns    schedule 05.05.2021    source источник


Ответы (3)


Вот решение.

Если в списке есть более одного элемента listOfElems.count(x) > 1, и наш список дубликатов еще не содержит элемент duplicates.count(x) == 0, то мы можем добавить элемент в список дубликатов.

listOfElems = ["a", "c", "c"]


def checkIfDuplicates_3(listOfElems):
    duplicates = []
    for x in listOfElems:
        if listOfElems.count(x) > 1 and duplicates.count(x) == 0:
            duplicates.append(x)
    return duplicates


# test
test = [listOfElems]

for t in test:
    output = checkIfDuplicates_3(t)
    print("The duplicate in", t, "is", output)
person lionrocker221    schedule 05.05.2021

Я не понимаю, зачем вам здесь нужен словарь. У вас нет ключа или значения. Все, что вам нужно сделать, это вернуть письмо, которое повторяется в списке.

В приведенном ниже коде используется понимание списка для решения вашей проблемы. Сначала мы вызываем эту функцию, передавая listOfElems. Затем мы пройдемся по данному списку и проверим наличие каждого элемента. Мы можем сделать это, используя count. Похоже, вы тоже использовали это. Если буква появляется более одного раза, мы добавим эту букву в новый список.

В приведенном вами примере мы получим что-то вроде этого, ['c','c']. Было бы неплохо, если бы c появилось только один раз. Чтобы решить эту проблему, мы можем использовать set, что даст нам {'c'}, что довольно неплохо. Чтобы закончить все это, мы возвращаем этот набор в виде списка.

listOfElems = ["a", "c", "c"]

def checkIfDuplicates_3(listOfElems):
    dups = [x for x in listOfElems if listOfElems.count(x) > 1]
    return list(set(dups))
print("The duplicates in", listOfElems, "are", checkIfDuplicates_3(listOfElems))
person BuddyBob    schedule 05.05.2021

Используя set и понимание списка, однострочная функция может сделать:

listOfElems = ["a", "c", "c","e","c","e","f"]

def checkIfDuplicates_3(listOfElems): return set([x for x in listOfElems if listOfElems.count(x)>1])

#test
test = [listOfElems]

for t in test:
    output = checkIfDuplicates_3(t)
    print("The duplicate in", t, "is", sorted(output))

Обратите внимание, что порядок вставки может не сохраняться набором. Чтобы получить упорядоченный вывод, используйте sorted (как показано в примере выше).

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

def checkIfDuplicates_3(listOfElems):
    return {x:listOfElems.count(x) for x in set(listOfElems) if listOfElems.count(x)>1}

например возвращая для checkIfDuplicates_3(listOfElems) результат {'e': 2, 'c': 3} (см. примечание для заказа выше).

person MPuc    schedule 05.05.2021