2010-06-09 5 views
0

Je sais que ce n'était pas clair. Voici ce que je fais spécifiquement. J'ai ma liste de dictionnaires ici:Python: Accéder à la valeur du dictionnaire à l'intérieur de tuple et trier rapidement par valeur dict

dict = [{int = 0, valeur = A}, {int = 1, valeur = B}, ... n]

et je veux les prendre dans les combinaisons, j'ai donc utilisé itertools et il m'a donné un tuple (Eh bien, ça m'a donné un objet mémoire que j'ai ensuite utilisé enumerate pour que je puisse boucler et énumérer donne un tuple):

pour (index, tuple) dans enumerate (combinaisons (dict, 2)):

et c'est là que j'ai mon problème. Je veux identifier lequel des deux éléments dans la combinaison a la plus grande valeur 'int' et qui a la plus petite valeur et les assigner aux variables (J'utilise en fait plus de 2 dans la combinaison, donc je ne peux pas dire si tuple [0] ['int']> tuple [1] ['int'] et fais le devoir car je devrais lister ceci plusieurs fois et c'est difficile à gérer). J'allais assigner chaque valeur 'int' à une variable, la trier dans une liste, indexer la valeur 'int' dans la liste par 1, 2, 3, 4, 5 ... etc, puis revenir en arrière et accéder au dictionnaire que je voulais par la valeur int, puis attribuer le dictionnaire à une variable afin que je sache lequel était le plus grand. Mais j'ai une grosse liste et les listes et les affectations de variables demandent beaucoup de ressources et cela prend beaucoup de temps (je n'en avais qu'un peu écrit et cela prenait une éternité à courir).

Alors j'espérais que quelqu'un connaissait un moyen rapide de le faire. En fait, je pourrais énumérer toutes les combinaisons possibles de assignmnets en utilisant les if/thens mais c'est juste comme 5 pages de if/thens et de devoirs et est difficile à lire et à gérer quand je veux le changer.

Vous avez probablement rassemblé, mais je «suis nouveau à la programmation. Thx

+2

Afficher un code complet Il est extrêmement difficile de comprendre ce que vous essayez de faire ou ce que vous avez – msw

+1

Un sous-ensemble légèrement plus grand de vos données, formaté comme vous l'utiliser dans votre programme, serait très utile, ainsi que le résultat souhaité pour votre sous-ensemble. Votre exemple, même édité, n'est toujours pas clair quant à l'intention. –

Répondre

2
for (index, tuple) in enumerate(combinations(dict, 2)): 
    thesmall = min(tuple, key=lambda d: d['int']) 
    thelarge = max(tuple, key=lambda d: d['int']) 

Si vous avez besoin plus que juste min et max, puis

inorder = sorted(tuple, key=lambda d: d['int']) 

et là vous avez tout

+4

L'utilisation d'un lambda peut être évitée en utilisant 'operator.itemgetter', par exemple' inorder = trié (tuple, key = operator.itemgetter ('int')) 'Bien que réputé plus rapide, ceci n'est peut-être pas intéressant pour un nouveau programmeur, sauf si le nouveau programmeur trouve l'utilisation de 'lambda' confuse ou pas claire. Dans ce cas, il est rappelé au nouveau programmeur d'importer l'opérateur avant d'utiliser 'operator.itemgetter'. Bien que le nouveau programmeur utilise 'itertools', le nouveau programmeur comprend probablement les mécanismes d'importation :) – intuited