2
votes

Convertir les valeurs d'un dictionnaire en un autre dictionnaire avec leurs nombres

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']}


0 commentaires

3 Réponses :


2
votes

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()}


0 commentaires

1
votes

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()}


0 commentaires

1
votes

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


0 commentaires