Counter est une classe enfant de dict et peut compter les objets hachables.
Par exemple, il existe les problèmes suivants:
Comptez le nombre de chaque élément dans le tableau ['a', 'b', 'c', 'c', 'a', 'a'] et obtenez le résultat avec dict
Comment résoudre sans utiliser Counter:
arr = ['a', 'b', 'c', 'c', 'a', 'a']
result_dict = {}
for item in arr:
if item in result_dict:
result_dict[item] = result_dict[item] + 1
else:
result_dict[item] = 1
print(result_dict)
#production
# {'a': 3, 'c': 2, 'b': 1}
Comment résoudre lors de l'utilisation de Counter:
from collections import Counter
cnt = Counter(['a', 'b', 'c', 'c', 'a', 'a'])
print(cnt)
#production
# Counter({'a': 3, 'c': 2, 'b': 1})
Le compteur peut être initialisé non seulement à partir d'un tableau, mais également à partir de dict et args.
#Initialiser le compteur avec dict
a = Counter({'red': 4, 'blue': 2})
print(a)
#production
# Counter({'red': 4, 'blue': 2})
#Initialiser le compteur avec des arguments
b = Counter(cats=4, dogs=8)
print(b)
#production
# Counter({'dogs': 8, 'cats': 4})
La méthode d'obtention des données de Counter est la même que celle de dict, et vous pouvez obtenir valeur par clé. La différence est que lors de l'extraction de données avec une clé qui n'existe pas, Counter renvoie "0", tandis que dict entraîne KeyError.
a = Counter({'red': 4, 'blue': 2})
print(a['red'])
#production
# 4
print(a['green'])
#production
# 0
La valeur de retour de elements () est iterator. Il convient de noter que Counter ne produit pas moins de 1.
c = Counter(a=2, b=4, c=0, d=-2, e=1)
it = c.elements()
print(type(it))
#production
# <class 'itertools.chain'>
print(list(it))
#production
# ['a', 'a', 'b', 'b', 'b', 'b', 'e']
most_common (n) retourne une liste de tuples sous la forme (élément, nombre d'occurrences)
classés par ordre de nombre d'occurrences. Lorsque le paramètre «n» est spécifié, les éléments «n» avec le plus grand nombre d'occurrences sont affichés, et lorsque «n» n'est pas spécifié, tous les éléments sont affichés.
c = Counter('abracadabra')
print(c.most_common(2))
#production
# [('a', 5), ('b', 2)]
print(c.most_common())
#production
# [('a', 5), ('b', 2), ('r', 2), ('c', 1), ('d', 1)]
soustraire (other_cnt) signifie soustraire un autre objet Counter de l'objet Counter.
c = Counter(a=4, b=2, c=0, d=-2, e=10)
d = Counter(a=1, b=2, c=-3, d=4, f=3)
c.subtract(d)
print(c)
#production
# Counter({'e': 10, 'a': 3, 'c': 3, 'b': 0, 'f': -3, 'd': -6})
update (other_cnt) signifie ajouter un autre objet Counter à l'objet Counter.
c = Counter(a=4, b=2, c=0, d=-2, e=10)
d = Counter(a=1, b=2, c=-3, d=4, f=3)
c.update(d)
print(c)
#production
# Counter({'e': 10, 'a': 5, 'b': 4, 'f': 3, 'd': 2, 'c': -3})
Par exemple, Tuple ordinaire stocke et génère des informations sur les étudiants. Le tribunal n'a d'autre choix que d'obtenir la valeur par indice comme indiqué ci-dessous. Ces sources sont perçues comme mal lisibles.
#Tuple étudiant(Nom, âge, sexe)
stu = ('Kimi', 15, 'male')
print(stu[0]) #Nom de sortie
print(stu[1]) #Âge de sortie
print(stu[2]) #Genre de sortie
namedtuple peut générer des tuples nommés. Vous pouvez accéder aux valeurs dans Tuple comme des attributs au lieu d'index.
from collections import namedtuple
Student = namedtuple('Student', 'name, age, gender')
stu = Student('Kimi', 15, 'male')
print(stu.name) #Nom de sortie
print(stu.age) #Âge de sortie
print(stu.gender) #Genre de sortie
_make () peut générer un namedtuple à partir d'objets itérables tels que list.
from collections import namedtuple
data = ['Kimi', 15, 'male']
Student = namedtuple('Student', 'name, age, gender')
stu = Student._make(data)
print(stu)
#production
# Student(name='Kimi', age=15, gender='male')
_asdict () renvoie les données dans namedtuple avec OrderDict.
from collections import namedtuple
Student = namedtuple('Student', 'name, age, gender')
stu = Student('Kimi', 15, 'male')
stu_dict = stu._asdict()
print(stu_dict)
#production
# OrderedDict([('name', 'Kimi'), ('age', 15), ('gender', 'male')])
print(stu_dict['name'])
#production
# Kimi
_replace () modifie la valeur de namedtuple et le renvoie en tant que nouvel objet namedtuple. N'affecte pas l'objet d'origine.
from collections import namedtuple
Student = namedtuple('Student', 'name, age, gender')
stu = Student('Kimi', 15, 'male')
new_stu = stu._replace(age=16)
print(new_stu)
#production
# Student(name='Kimi', age=16, gender='male')
print(stu)
#production
# Student(name='Kimi', age=15, gender='male')
_fields peut obtenir le nom de champ de namedtuple avec Tuple.
from collections import namedtuple
Student = namedtuple('Student', 'name, age, gender')
print(Student._fields)
#production
# ('name', 'age', 'gender')
Les _fields sont souvent utilisés pour créer de nouveaux namestuples basés sur des namedtuples existants. Similaire à la classe "héritage".
from collections import namedtuple
Point2D = namedtuple('Point2D', 'x, y')
Point3D = namedtuple('Point3D', Point2D._fields + ('z',))
p = Point3D(30, 18, 90)
print(p)
#production
# Point3D(x=30, y=18, z=90)
Lors de la récupération d'une valeur à partir d'un dict normal, si vous utilisez une clé qui n'existe pas, vous obtiendrez une KeyError.
my_dict = {'a': 1, 'b': 2}
print(my_dict['c'])
#production
# KeyError: 'c'
defaultdict peut créer un dict avec une valeur par défaut. Renvoie la valeur par défaut en cas d'accès avec une clé qui n'existe pas.
from collections import defaultdict
my_dict = defaultdict(lambda: 0, {'a': 1, 'b': 2})
print(my_dict['c'])
#production
# 0
Recommended Posts