Подсчет слов в словаре

В вашей раскадровке вы можете встроить ViewController в контроллер навигации, выбрав «Контроллер просмотра», а затем выбрав из меню вверху Editor->Embed In->Navigation Controller. С другого контроллера просмотра вы управляете перетаскиванием на этот контроллер навигации для настройки modal segue. Вы также можете управлять перетаскиванием на исходный контроллер просмотра, чтобы настроить его для него без навигационного контроллера.

Storyboard showing a view controller both embedded in a navigation controller and not [/g0]

2
задан Charles Landau 23 February 2019 в 19:31
поделиться

4 ответа

Ваша первая проблема - получить счетчик, поэтому мы реструктурируем в новый словарь под названием out:

out = {}
for month in bought:
  for fruit in bought[month]:
    out[fruit] = out.get(fruit, 0) + 1

Этот цикл for просто проходит все ключи (месяцы) в [ 113] и перебирает список, который находит там. Когда он читает фрукты в этом списке, он проверяет, есть ли этот фрукт в out. Если нет, он инициализирует этот плод в out как 0. Наконец, он увеличивает значение на единицу.

Теперь нам нужно напечатать в нужном формате:

for k in out:
      print("{}: {}".format(k, out[k]))

Форматирование строк в Python чрезвычайно зрелое. Вы можете узнать все виды трюков, например, на https://pyformat.info/ . Здесь мы просто вставляем ключ, а затем значение в строковый шаблон, итерацией по out.

0
ответ дан Charles Landau 23 February 2019 в 19:31
поделиться

Я просто быстро бросил это вместе.

Код:

bought = {
"January": ['Apple', 'Banana', 'Orange', 'Kiwi', 'Raspberry'],
"February": ['Orange', 'Mango', 'Banana'], 
"March": ['Apple', 'Starfruit', 'Apricot']
}

numbers = {}
allb = []
for month in bought:
    allb += bought[month]
for item in allb:
    if item in numbers:
        numbers[item] += 1
    else:
        numbers[item] = 1
print(numbers) # Note you can format this however you want: just iterate through the dictionary again

Ожидаемый результат:

Apple: 2, Banana: 2, Orange: 2, Kiwi: 1, Raspberry: 1, Mango: 1, Starfruit: 1, Apricot: 1

Фактический результат:

{'Apple': 2, 'Banana': 2, 'Orange': 2, 'Kiwi': 1, 'Raspberry': 1, 'Mango': 1, 'Starfruit': 1, 'Apricot': 1}

(Поскольку numbers является словарем, вы можете сделать очень мощные вещи для поиска чисел. В этом случае он действует как таблица.)

Первый for цикл проходит через все купленные ключи (как отформатировано, все месяцы) и ищет их значение. Затем эти значения добавляются в мой список allb (все куплено). Далее я перебираю allb и if, что элемент уже в числах: я добавляю 1 к счету, в противном случае я устанавливаю счет в 1. [ 1113]

0
ответ дан PrinceOfCreation 23 February 2019 в 19:31
поделиться

Вы можете использовать Counter:

from collections import Counter
from itertools import chain
from pprint import pprint

c = Counter(chain.from_iterable(bought.values()))

pprint(c)

Выход:

Counter({'Apple': 2,
         'Banana': 2,
         'Orange': 2,
         'Kiwi': 1,
         'Raspberry': 1,
         'Mango': 1,
         'Starfruit': 1,
         'Apricot': 1})
0
ответ дан Mykola Zotko 23 February 2019 в 19:31
поделиться

Использование встроенного счетчика. Один вкладыш: -)

from collections import Counter

bought = {
    "January": ['Apple', 'Banana', 'Orange', 'Kiwi', 'Raspberry'],
    "February": ['Orange', 'Mango', 'Banana'],
    "March": ['Apple', 'Starfruit', 'Apricot']
}

count = Counter([y for x in bought.values() for y in x])
print(count)
0
ответ дан balderman 23 February 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: