Считайте в Python, используя словарь Fuction - PullRequest
0 голосов
/ 19 сентября 2018

Итак, я попытался сосчитать случайный массив, например [1,2,4,6,1,6,8,3,7,8], а затем вывести массив.Я знаю, что вывод не правильный, но я получаю это сообщение об ошибке: Исключение: KeyError :: line 9 :: in duplicate_items count [nums] + = 1 Что это значит?

и нет, я нехочу использовать модуль сбора.

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

def duplicate_items(list_numbers):
    counts = {}
    new_arr = []
    for nums in list_numbers:
        if nums in counts:
            count[nums] = 1

        else:
            counts[nums] += 1
    for k in counts:
        if count[k] > 1:
            new_arr.append(k)

return sorted(new_arr)

Ответы [ 4 ]

0 голосов
/ 20 сентября 2018

Как насчет этого?Вам не нужно использовать collections Python имеет встроенную функцию .count, вы можете создать свой counts словарь, используя index и count этого индекса.

Тогда вы можетесоздайте свой список с помощью списка для понимания и добавляйте только элементы словаря, значение которых превышает 1

def dups(l_nums):
    counts = {i: l_nums.count(i) for i in l_nums}
    new_arr = [k for k in counts if counts[k] > 1]
    return(sorted(new_arr))
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 time.py
[1, 6, 8]
0 голосов
/ 19 сентября 2018

@ E.Sun дала правильное объяснение, но вы также можете сделать это более элегантно.используя dict.get для предоставления значения по умолчанию, если ключ не указан в диктовке.

for nums in list_numbers:
    # If the key, nums is not in counts, take 0 as fallback value.
    counts[nums] = counts.get(nums, 0) + 1
0 голосов
/ 19 сентября 2018

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

def duplicate_items(list_numbers):
    counts = {}
    for nums in list_numbers:
        counts[nums] = counts.get(nums, 0) + 1
    new_arr = [k for (k, v) in counts.items() if v > 1]

return sorted(new_arr)
0 голосов
/ 19 сентября 2018

Ваши if и else в первом цикле перевернуты, поэтому counts[nums] += 1 не может найти ключ, это должно быть:

def duplicate_items(list_numbers):
    counts = {}
    new_arr = []
    for nums in list_numbers:
        if not nums in counts:
            counts[nums] = 1
        else:
            counts[nums] += 1
    for k in counts:
        if count[k] > 1:
            new_arr.append(k)
return sorted(new_arr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...