увеличить значение словаря с помощью словарного понимания - PullRequest
0 голосов
/ 19 января 2020

Я хотел бы написать простой код для хранения данных гистограммы в словаре, я хочу использовать словарное понимание для построения окончательного диктанта гистограммы. в python. Я могу добиться этого несколькими способами, как показано в коде ниже, но у меня есть проблема со вторым методом, вот как он работает:

  1. Перечислите список случайных букв, чтобы использовать этот индекс для доступа к срезу списка, начиная с текущей итерации и до конца
  2. проверьте, существуют ли буквы в срезе
  3. , если да, добавьте букву в качестве индекса в словарь и увеличьте ее значение на 1
  4. если нет, добавьте букву в качестве индекса к словарю и установите его значение равным 1, моя проблема в том, где этот временный словарь добавить перед диктовкой. Понимание исчерпано. Я попробовал окончательный вариант dict «histogram_dict», но это не то же самое. Опять же, основная цель - переписать первый код в терминах словарного понимания, как во втором коде. Спасибо

import random
rnd_letters_list=[chr(random.randrange(97,122)) for i in range(21)]
histogram_dict={}

#=============first method ==============
# for letter in rnd_letters_list:
#     if letter in histogram_dict:
#         histogram_dict[letter]+=1
#     else:
#         histogram_dict[letter]=1
# print(histogram_dict)

#=============second method ==============
histogram_dict={letter: XXX_dict[letter]+=1
                        if letter in rnd_letters_list[indx::]
                        else XXX_dict[letter]=1
                for indx,letter in enumerate(rnd_letters_list)}
print(histogram_dict)

#=============third method ==============
# histogram_dict={letter:rnd_letters_list.count(letter)
#                 for letter in rnd_letters_list}
# print(histogram_dict)

#=============fourth method ==============
# from collections import Counter
# print(dict(
# Counter(rnd_letters_list).most_common()))

1 Ответ

0 голосов
/ 19 января 2020

У меня была такая же проблема несколько недель go. Я расширяю счетчик класса. Счетчик сам расширяет словарь.

Счетчик документов

from typing import Counter, Dict


class Histogram(Counter):
    """
    A that saves discrete values for a histogram in an efficient manor.
    """

    def population(self) -> int:
        return sum(self.values())

    def mean(self) -> float:
        population = 0
        average_value = 0
        for key, value in self.items():
            average_value += key * value
            population += value
        return average_value / population

    def y_mean(self) -> float:
        entry_counts: int = len(self.items())
        sum_of_values: int = sum(self.values())
        return sum_of_values / (entry_counts * sum_of_values)

    def median(self, alpha: float = 0.5) -> float:
        position: int = round(alpha * self.population())
        keys = sorted(self.keys())
        for key in keys:
            position -= self[key]
            if position < 0:
                return key
        return float("NaN") 

    def variance(self) -> float:
        pop: int = self.population()
        if pop < 2:
            return 0
        var: float = 0
        mean: float = self.mean()
        for key, value in self.items():
            var += float(value) * ((float(key) - mean) ** 2)
        return var / (pop - 1)

    def normed(self) -> Dict[int, float]:
        dictionary: Dict[int, float] = {}
        population = self.population()
        for key, value in self.items():
            dictionary[key] = value / population
        return dictionary

...