-2
votes

Fusion de deux listes de dictionnaires pour créer un troisième à Python

Disons que j'ai ce qui suit: xxx

et celui-ci: xxx

Comment puis-je obtenir un troisième comme celui-ci: xxx


4 commentaires

Qu'est-ce que tu as essayé jusque-là?


Rien de vraiment pertinent, je construisais une nouvelle liste de dictionnaires basée sur des clés dont j'ai besoin, car ils sont plus que ceux mentionnés et j'en ai besoin que quelques-uns d'entre eux et dont j'en ai besoin que j'ai besoin de la paire de valeur clé de l'autre liste et de Je ne sais pas comment l'obtenir. J'ai essayé de jouer un peu avec intersect mais sans succès


Cela pourrait vous aider à créer un dictionnaire intermédiaire qui mappe un nom d'utilisateur à une liste des identifiants utilisateur, puis la convertissez-la dans une liste des profils utilisateur.


J'ai construit une petite fonction intermédiaire afin d'extraire les deux valeurs, mais mon problème est que les listes ne sont pas commandées et qu'elles ne contiennent pas nécessaires contiennent tout le nom d'utilisateur, l'un étant un sous-ensemble de l'autre, donc je ne peux pas simplement itérer sur chaque article lorsque la commande n'est pas identique ni la longueur


3 Réponses :


1
votes

Vous pouvez construire un dict code> pour chacune des 2 listes d'entrée, comme ceci:

list_result = []

for username, d in dict_result.items():
    # 'd' already contains the other data, we just add the 'username'
    d['username'] = username

    list_result.append(d)


2 commentaires

Merci d'avoir corrigé le format de ma question et pour la réponse qui correspond pleinement à mes besoins. j'étais fatigué hier


Ma solution a une complexité de temps linéaire (exprimée comme O (n + m) ); Pour les grandes listes, il sera notable plus rapide que d'utiliser une boucle de douche (qui utilisera le temps quadratique O (n2) ). Pour les petites listes, la différence aura de sens.



0
votes

Vous pouvez obtenir le résultat souhaité avec la manière suivante dans quelques lignes de code: xxx pré>

résultat final: p>

[{'username': 'seconduser', 'userid_one': '2', 'userid_two': '102'}, {'username': 'thirduser', 'userid_one': '3', 'userid_two': ''}, {'username': 'firstuser', 'userid_one': '1', 'userid_two': '101'}]


0 commentaires

1
votes

J'ai fini par faire ce qui suit (avant de voir à la fois de nouvelles réponses): xxx

Il semble assez proche des réponses récentes mais je ne sais pas quel est le meilleur moyen de le faire < / p>


2 commentaires

Bien que cette approche fonctionne, il suffit de noter que cela a une complexité de temps cuadratique ( O (n2) ); Peu importe pour de petites listes, mais avec quelques éléments de Hundert, il sera sensiblement plus lent que la réponse que vous avez marquée comme acceptée (merci, au fait).


Je suis tout à fait d'accord avec vous et c'était le point que je n'étais pas content de (complexité temporelle), car les deux listes sont assez petites (moins de 200 pour le premier et moins de 100 pour la seconde), je vais le garder comme si