2009-08-09 11 views
4

J'ai eu un problème avec la création de listes triées à partir de dictionnaires. J'ai cette listetriez un dictionnaire par un autre dictionnaire

list = [ 
    d = {'file_name':'thisfile.flt', 'item_name':'box', 'item_height':'8.7', 'item_width':'10.5', 'item_depth':'2.2', 'texture_file': 'red.jpg'}, 
    d = {'file_name':'thatfile.flt', 'item_name':'teapot', 'item_height':'6.0', 'item_width':'12.4', 'item_depth':'3.0' 'texture_file': 'blue.jpg'}, 
    etc. 
] 

Je suis en train de boucler la liste et

  • de chaque dictionnaire créer une nouvelle liste contenant des éléments du dictionnaire. (Il varie les éléments et le nombre d'éléments doivent être annexés à la liste que l'utilisateur fait ce choix)
  • trier la liste

Quand je dis genre, j'imagine la création d'un nouveau dictionnaire comme celui-ci

order = { 
    'file_name': 0, 
    'item_name': 1, 
    'item_height': 2, 
    'item_width': 3, 
    'item_depth': 4, 
    'texture_file': 5 
} 

et trie chaque liste par les valeurs du dictionnaire d'ordres.


Au cours d'une exécution du script toutes les listes pourraient ressembler à ceci

['thisfile.flt', 'box', '8.7', '10.5', '2.2'] 
['thatfile.flt', 'teapot', '6.0', '12.4', '3.0'] 

d'autre part, ils pourraient ressembler à ceci

['thisfile.flt', 'box', '8.7', '10.5', 'red.jpg'] 
['thatfile.flt', 'teapot', '6.0', '12.4', 'blue.jpg'] 

Je suppose que ma question est de savoir comment serait Je fais une liste à partir de valeurs spécifiques d'un dictionnaire et je la classe par les valeurs d'un autre dictionnaire qui a les mêmes clés que le premier dictionnaire.

apprécierais toutes les idées/suggestions, désolé pour le comportement noobish - Je suis encore à apprendre python/programmation

+0

La classe 'namedtuple' pourrait répondre à vos besoins mieux que les dictionnaires ici. C'est dans le module 'collections' sur python 2.6+, ou si vous êtes sur 2.4 ou 2.5, obtenez-le à partir du livre de recettes Python: http://code.activestate.com/recipes/500261/ –

Répondre

11

La première zone de code est incorrect syntaxe Python (je soupçonne que les d = parties sont étrangères ...?), Ainsi que piétinement imprudent sur le nom intégré list.

Quoi qu'il en soit, étant donné par exemple:

d = {'file_name':'thisfile.flt', 'item_name':'box', 'item_height':'8.7', 
    'item_width':'10.5', 'item_depth':'2.2', 'texture_file': 'red.jpg'} 

order = { 
    'file_name': 0, 
    'item_name': 1, 
    'item_height': 2, 
    'item_width': 3, 
    'item_depth': 4, 
    'texture_file': 5 
} 

une façon astucieuse pour obtenir le résultat souhaité ['thisfile.flt', 'box', '8.7', '10.5', '2.2', "red.jpg'] serait:

def doit(d, order): 
    return [d[k] for k in sorted(order, key=order.get)] 
+1

ah oui, je suis édité le poste trop de fois avant de poster et s'est avorté. merci pour la réponse soignée, je ne l'aurais jamais compris –

+0

@Ian, vous êtes les bienvenus! –

+0

Ce n'est pas ce que je reçois en 2.6.2: >>> trié ((d [k] pour k dans l'ordre), clé = ordre.get, inverse = Vrai) ['8.7', 'box', ' thisfile.flt ',' red.jpg ',' 2.2 ', '10 .5'] dans 3.0, j'obtiens une erreur: >>> triés ((d [k] pour k dans l'ordre), clé = ordre. obtenir, reverse = True retraçage (appel le plus récent en dernier): fichier "", ligne 1, dans TypeError: types unorderable: NoneType() hughdbrown