J'ai une liste de dict avec la même structure ce que je veux, ce sont des clés en double du "nom du programme" qui ont la même valeur (ex: "Bulldozer" apparaissant 2x) à être renommé "bulldozer (1)", "bulldozer (2)" et ainsi de suite. P> p>
4 Réponses :
J'espère que cela aide: rendements: p>
Vous pouvez essayer cela aussi: sortie: p> Je vous recommanderais d'utiliser Approche: 01 code> p> 02 code> p> pandas (approche 01 ) code> si vous avez une énorme quantité de données. p> p>
Bulldozer n'est qu'un exemple de la liste contient 10 000 dict et beaucoup de noms de programme différents
Bien que l'approche 2 code> est très similaire à la réponse @jizhihaosama.
Un moyen efficace est d'utiliser résultat: p> defaultDict code> pour compter le "nom du programme" code>, la complexité temporelle
est o (n) code>:
Semble se séparer de noms avec des espaces comme si j'ai un nom de programme avec "Bulldozer Rambo", il démarrera Collectiong le nom de Bulldozer par son propre nom et non l'ensemble du nom "Bulldozer Rambo". Corrigé en retirant la division () [0]
@Crapy Si oui. Vous pouvez utiliser TMP ["" .Join (i "[nom du programme»]. Split () [: - 1])] + = 1 code> ou regex pour les diviser.
@Crapy Si vous supprimez le Split code>, le nom complet "xxx (1)" code> sera ajouté dans le TMP code> ce que vous voulez .Vous pouvez utiliser l'impression (TMP) pour le voir. Ce sera un comportement inattendu lorsqu'il y a trois ou plusieurs duplicataires "Nom du programme" code>.
J'ai essayé votre solution avec la division () [: - 1] mais il semble ne pas bien fonctionner pour des noms compliqués tels que Bulldozer Mega (Q7-4), par exemple
Merci à @jizhihaosama, j'ai réussi à trouver une solution à mon problème avec une petite modification
machines = [{"Program Name": "Bulldozer", "Level": 3}, {"Program Name": "Robot", "Level": 1}, {"Program Name": "Bulldozer", "Level": 4}]
tmp = defaultdict(int)
for i in machines:
name = i["Program Name"].strip(f' ({tmp[i["Program Name"]]})')
i["Program Name"] = f'{name} ({tmp[i["Program Name"]]})' if tmp[name] else i["Program Name"]
tmp[name] += 1
Pouvez-vous partager votre tentative?
Votre entrée est-elle correcte? Comment une liste peut avoir une paire de valeur clé?
Est-ce que la commande est importante?
@jizhihaosama il ne fait pas