2015-11-24 2 views
-2
alist = [5, 7, 6, 2, 9, 1, 7] 

D = {} 

для каждого уникального номера в списке, установите новый ключ для каждого ключа в словаре, подсчитывать количество этого ключа и присвоено значениезначение Counting в списке, поставив в словаре

это должно выглядеть {5:1, 2:1, 6:1, 9:1, 1:1, 7:2}

алгоритм:

For each number n on the input list: 
∗ If n in count: set count[n] to count[n] + 1 
∗ else: set count[n] to 1 

Я не знаю, как идти об этом. Может ли кто-нибудь показать мне, как это сделать?

Попытка:

for number in alist: 
    if number in D: 
     D[number] = D[number]+1 
    else: 
     D[number] = 1 

Ошибка:

Traceback (most recent call last): File "<pyshell#15>", line 3, in 
<module> D[number] = D[number]+1 KeyError: 5 
+0

Добро пожаловать на переполнение стека! Кажется, вы просите кого-нибудь написать для вас какой-то код. Переполнение стека - это вопрос и ответ, а не служба написания кода. Пожалуйста, [см. Здесь] (http://stackoverflow.com/help/how-to-ask), чтобы узнать, как писать эффективные вопросы. –

+0

Я новичок в этом, и я пытаюсь.Я попытался написать его, но я получаю сообщение об ошибке. это то, что я нахожусь на: для числа в ALIST: \t если число в ALIST: \t \t D [число] = D [номер + 1] \t еще: \t \t D [число] = 1 –

+0

переместите '+ 1' в' D [число + 1] 'на внешнюю сторону скобок, например' D [number] + 1', или просто измените эту строку на 'D [число] + = 1' –

ответ

2
>>> from collections import Counter 
>>> Counter(alist) 
Counter({7: 2, 1: 1, 2: 1, 5: 1, 6: 1, 9: 1}) 
1

Простейший способ сделать это генератор словаря

count_dict = {elem:a_list.count(elem) for elem in a_list} 

Это как цикл, но он определяет как ключ и значение для каждого словаря Эм.

0

Чтобы исправить вам код и алгоритм, вам нужно проверить, если n в D.keys() (который возвращает список ключей D словаря:

>>> D = {} 
>>> for n in alist: 
    if n in D.keys(): 
     D[n] += 1 
    else: 
     D[n] = 1 


>>> D 
{1: 1, 2: 1, 5: 1, 6: 1, 7: 2, 9: 1} 
1

Ayush Shanker's answer является совершенно правильным способом сделать то, что вы хотите . Я укажу, как исправить код у вас есть сейчас.

во-первых, в этих двух строках

for number in alist: 
    if number in alist: 

В основном вы говорите «для каждого номера в alist, проверьте, не ли это в alist». Конечно, это является! Итак, вы действительно хотите if number in D: для второй строки, потому что тогда вы проверяете, находится ли номер в словаре, который вы строите.

Вторая проблема заключается в следующем:

 D[number] = D[number+1] 

number и number+1 здесь индексы, так что вы имеете в виду двух различных элементов в D. Решение заключается в перемещении +1 снаружи. Это то, что фиксированный код выглядит следующим образом:

for number in alist: 
    if number in D: 
     D[number] = D[number] + 1 
    else: 
     D[number] = 1 

Чтобы быть более вещим, вы можете также заменить D[number] = D[number] + 1 с D[number] += 1.

0

РЕШЕНИЕ:

def mode(somelist): 
     count = {} 
     for n in alist: 
      if n in count: 
       count[n]+=1 
      else: 
       count[n] = 1 
     return(count) 
Смежные вопросы