2016-08-01 14 views
0
list_1 = [{'1': 'name_1', '2': 'name_2', '3': 'name_3',}, 
     {'1': 'age_1', '2': 'age_2' ,'3': 'age_3',}] 

Ich möchte diese Liste so bearbeiten, dass die dicts alle Attribute für eine bestimmte ID enthalten. Die ID selbst muss Teil des resultierenden Diktats sein. Ein Beispiel Ausgaben ist wie folgt:Rekonstruieren Sie die Liste von Dict in Python, aber das Ergebnis ist nicht in Reihenfolge

list_2 = [{'id' : '1', 'name' : 'name_1', 'age': 'age_1'}, 
     {'id' : '2', 'name' : 'name_2', 'age': 'age_2'}, 
     {'id' : '3', 'name' : 'name_3', 'age': 'age_3'}] 

Dann habe ich folgendes:

>>> list_2=[{'id':x,'name':list_1[0][x],'age':list_1[1][x]} for x in list_1[0].keys()] 

Dann gibt es:

>>> list_2 
    [{'age': 'age_1', 'id': '1', 'name': 'name_1'}, 
    {'age': 'age_3', 'id': '3', 'name': 'name_3'}, 
    {'age': 'age_2', 'id': '2', 'name': 'name_2'}] 

Aber ich verstehe nicht, warum 'id' zeigt in die zweite Position, während "Alter" zuerst angezeigt wird?

Ich habe andere Möglichkeiten versucht, aber das Ergebnis ist das gleiche. Jeder kann helfen, es herauszufinden?

+0

Ich denke, das ist ganz dupli Cate: http://StackOverflow.com/Q/1867861/42346 – bernie

+1

Python-Wörterbücher hat keine Reihenfolge. Sie müssen ein Wörterbuch bestellen –

Antwort

1

die Reihenfolge zu halten, sollten Sie eine ordered dictionary verwenden . Mit Ihrem Beispiel:

new_list = [OrderedDict([('id', x), ('name', list_1[0][x]), ('age', list_1[1][x])]) for x in list_1[0].keys()] 

die geordnete Liste Drucken ...

for d in new_list:                        
    print(d[name], d[age]) 

name_1 age_1

NAME_3 age_3

name_2 age_2

0

Versuchen Sie, eine OrderedDict mit:

list_1 = [collections.OrderedDict([('1','name_1'), ('2', 'name_2'), ('3', 'name_3')]), 
     collections.OrderedDict([('1','age_1'),('2','age_2'),('3', 'age_3')])] 

list_2=[collections.OrderedDict([('id',x), ('name',list_1[0][x]), ('age', list_1[1][x])]) 
     for x in list_1[0].keys()] 

Dieses wahrscheinlicher ist es, die gewünschte Reihenfolge zu bewahren. Ich bin noch neu bei Python, also ist das vielleicht nicht super Pythonic, aber ich denke, es wird funktionieren.

Ausgang -

In [24]: list(list_2[0].keys()) 
Out[24]: ['id', 'name', 'age'] 

Docs: https://docs.python.org/3/library/collections.html#collections.OrderedDict

Beispiele: https://pymotw.com/2/collections/ordereddict.html

Getting die Konstrukteurs rechts: Right way to initialize an OrderedDict using its constructor such that it retains order of initial data?

Verwandte Themen