J'ai un dictionnaire comme suit:
length_dict = {key: len(value) for key, value in d.items()}
Je veux convertir ce dictionnaire en un dictionnaire imbriqué avec les valeurs d'une clé et leur décompte comme suit:
d = {'a':{'the':2,'an':2},'b':{'hello':2,'or':1}}
Je peux compter les valeurs d'un dictionnaire comme suit, mais je n'arrive pas à transformer les valeurs en un autre dictionnaire avec leurs nombres.
d= {'a':['the','the','an','an'],'b':['hello','hello','or']}
3 Réponses :
Vous pouvez utiliser collections.Counter à la place:
{'a': {'the': 2, 'an': 2}, 'b': {'hello': 2, 'or': 1}}
Ceci renvoie:
from collections import Counter
{k: dict(Counter(v)) for k, v in d.items()}
Une compréhension de dictionnaire utilisant Counter
from pandas import Series
df = pd.DataFrame(dict([ (k,Series(v)) for k,v in d.items() ]))
{c:df[c].value_counts().to_dict() for c in df.columns}
Sans utiliser Counter
def count_values(v):
d={}
for i in v:
d[i]=d.get(i,0)+1
return d
{k:{p:q for p,q in count_values(v).items()} for k,v in d.items()}
Vous donnant plus d'options en utilisant Pandas (non obligatoire) ici mais quand même
from collections import Counter
{k:{p:q for p,q in Counter(v).items()} for k,v in d.items()}
d = {'a': ['the', 'the', 'an', 'an'], 'b': ['hello', 'hello', 'or']}
I pense que tu dois le faire:
from collections import Counter
new_dict = {}
for k in d.keys():
aux_counter = Counter(d[k])
new_dict [k] = {}
for c, v in zip(aux_counter.keys(), aux_counter.values()):
new_dict[k][c] = v