Подсчет с помощью словарей Python и добавление функциональности - PullRequest
2 голосов
/ 02 июня 2011
 a = 0
 b = 0
 c = 0
 d = 0

fruit = {
'lemons': [],
'apples': [],
'cherries': [],
'oranges': [],
 }


def count():
    fruit = input("What fruit are you getting at the store? ")
    if fruit == 'lemons':
        fruit['lemons'] = a + 1
    elif fruit == 'apples':
                fruit['apples'] = b + 1
    elif fruit == 'cherries':
                fruit['cherries'] = c + 1

    elif fruit == 'oranges':
                fruit['oranges'] = d + 1
    else: ????

Эй, я пытаюсь сделать две вещи здесь: 1) посчитать, сколько вхождений определенного слова (в данном случае, определенных видов фруктов) появляется в документе, который я пытаюсь смоделироватьздесь с простой функцией ввода.Я знаю, что это не идеально, но я не могу понять , как заставить каждое вхождение постепенно увеличивать значение для соответствующего ключа .Например, если я вызываю эту функцию дважды и набираю «лимоны», счетчик должен быть равен 2, но он остается равным 1. Другими словами, моя функция - лимон, но я не знаю почему.Последнее, с чем у меня проблемы, это функция else.2) Моя программа будет искать предварительно определенные разделы документа, и я хотел бы, чтобы моя функция else создала пару слов: значение в словаре, если существующий ключ не существует .Например, если моя программа встречает слово «банан», я хотел бы добавить пару k: v {«банан»: []} в текущий словарь, чтобы я мог начать считать эти случаи.Но, похоже, для этого потребуется, чтобы я не только добавил пару k: v в словарь (что я не совсем правильно знаю), но и добавил функцию и переменную для подсчета вхождений, аналогичных другим k: vпары.

Имеет ли смысл вся эта установка для того, что я пытаюсь сделать?Пожалуйста, помогите.

Ответы [ 2 ]

4 голосов
/ 02 июня 2011

Кажется, у вас есть несколько переменных с именем fruit, это плохая идея. И если вы просто считаете, вы должны начать с 0, а не []. Вы можете написать свой код проще как:

import collections
result = collections.defaultdict(int)
def count():
    fruit = input("What fruit are you getting at the store? ")
    result[fruit] += 1

В Python 3.1+ вы должны использовать collections.Counter вместо collections.defaultdict(int). Если вы вообще не хотите использовать модуль collections, вы также можете записать функциональность defaultdict:

result = {}
def count():
    fruit = input("What fruit are you getting at the store? ")
    if fruit not in result:
        result[fruit] = 0 # Create a new entry in the dictionary. 0 == int()
    result[fruit] += 1
0 голосов
/ 02 июня 2011

Вы можете сделать это следующим образом:

fruits = {
    'lemons': 0,
    'apples': 0,
    'cherries': 0,
    'oranges': 0,
}

fruit = input("What fruit are you getting at the store? ")

if fruits.has_key(fruit):
   fruits[fruit] += 1
...