J'ai un dictionnaire Python: Je veux le résultat comme suit: p> peut-être que quelqu'un puisse me dire comment faire comment faire Ceci? P> P>
5 Réponses :
Essayez ceci
Il ressemble à une solution inefficace, l'itération à travers des dicts imbriqués donnera au O (n ^ 2) code>
Je n'ai pas utilisé pour boucle mais utilisé votre requête de groupeby et obtenu le résultat df = pd.dataframe (d) df [["col1", "col2"]] = pd.dataframe (df.col1.values.tolist (), index = df.index) df ['col1'] = df.col1.str.replace ('#', ',') df = df.groupby (["Col2"]) ["Col1"]. Appliquer (Lambda x: ",". Joindre (ensemble (''. Joindre (liste (x)). Strip (","). Split (","))))))))))))
Voici un code simple
Ce n'est pas la même sortie que OP s'attend.
Si la commande de balises est importante, supprimez d'abord le suivi # code> et scinder par
# code>, puis par groupe supprimez les doublons et
rejoindre code>:
df = pd.DataFrame(d['col1'])
df['tag'] = df['tag'].str.strip('#').str.split('#')
f = lambda x: ','.join(set([z for y in x for z in y]))
df = df.groupby('id')['tag'].apply(f).reset_index()
print (df)
id tag
0 1 three,one,two
1 2 two
dic = [{'col1': [{'id': 1, 'tag': '# un # deux'}, {'id': 2, 'tag': '# deux #'}, { 'id': 1, 'tag': '# un # trois #'}]}] p>
rangée = [] Pour la clé en DIC: Data = Key ['Col1'] Pour les lignes dans les données: rangée.append (rangées) df = pd.dataframe (rangée) Imprimer (DF) P>
o p>
Bien que ce code puisse répondre à la question, fournissant un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme. Je vous recommanderais de vérifier alors officiel Comment répondre à l'article ainsi que le compréhensive Blog POST de JON SKEET .
J'ai essayé comme ci-dessous
import pandas as pd a = {'col1':[{'id':1, 'tag':'#one#two'},{'id':2, 'tag':'#two#'},{'id':1, 'tag':'#one#three#'}]} df = pd.DataFrame(a) df[["col1", "col2"]] = pd.DataFrame(df.col1.values.tolist(), index = df.index) df['col1'] = df.col1.str.replace('#', ',') df = df.groupby(["col2"])["col1"].apply(lambda x : ",".join(set(''.join(list(x)).strip(",").split(",")))) O/P: col2 1 one,two,three 2 two
Utilisez
pour code> -Loop pour fonctionner avec le dictionnaire et le convertir en listé des listes ou du nouveau dictionnaire.
Un ordre particulier des balises dans le résultat est requis?