Estoy usando Counter de collections para contar la aparición de algunos números. Estoy tratando de poner los números en una lista y el recuento en otra lista.

El Counter(array) devuelve datos que le gustan como {(30: 2, 26: 2, 18: 2)}. Me gustaría que hubiera dos matrices, digamos A[] y B[], donde A sería [30, 26, 18] y B sería [2, 2, 2].

¿Cómo haría esto?

1
taway0282 10 may. 2019 a las 21:10

4 respuestas

La mejor respuesta

Puede simplemente zip el items del dict que Counter devuelve como,

>>> vals
[26, 26, 18, 18, 30, 30]
>>> import collections
>>> collections.Counter(vals)
Counter({26: 2, 18: 2, 30: 2})
>>> zip(*collections.Counter(vals).items())
[(26, 18, 30), (2, 2, 2)]
>>> a, b = zip(*collections.Counter(vals).items())
>>> a
(26, 18, 30)
>>> b
(2, 2, 2)
4
han solo 10 may. 2019 a las 18:13

Counter es una subclase de dict, por lo que puede usar los métodos de diccionario normales

from collections import Counter

array = [1, 2, 3, 3, 4, 4, 4]
counter = Counter(array)
items = list(counter.keys())
counts = list(counter.values())
isinstance(counter, dict)  # True
2
Nathan 10 may. 2019 a las 18:13

Counter es un dict spcialized. Tiene teclas () y values () así como elementos ()

from collections import Counter

c =Counter( {30: 2, 26: 2, 18: 77} )

a = list(c.keys())      # make a list from the keys view
b = list(c.values())    # make a list from the values


# or # decompose the list of key,value tuples
A, B = map(list,zip(*c.items()))    

print(a,b,A,B,sep="\n")

Salida:

[30, 26, 18]   # a
[2, 2, 77]     # b
[30, 26, 18]   # A
[2, 2, 77]     # B

Doku

0
Patrick Artner 10 may. 2019 a las 18:19

Use .items () para recopilar las claves y los valores:

from collections import Counter
d=['a', 'b', 'b', 'c']
l = Counter(d)
A=[k for k, v in l.items()]
print(A)

Result: ['a', 'b', 'c']
0
âńōŋŷXmoůŜ 10 may. 2019 a las 18:14