2016-07-01 22 views
1

Ich habe eine Codierung Herausforderung erfordert, dass ich eine Logik erstellen, die eine Liste von Wörterbüchern in drei neue Listen von Dicts partitioniert. Die neuen Listen müssen dieselbe Anzahl erfahrener und unerfahrener Mitarbeiter haben. Die ursprüngliche Liste hat eine gerade Anzahl erfahrener und unerfahrener Mitarbeiter. Ich habe keine Ahnung, wie ich die Logik für diese Herausforderung gestalten soll. Hier ist eine verkürzte Version:Partitionieren einer Liste von Wörterbüchern in Python nach einem Wert

mylist = [ 
    {'name': 'Jade', 'height': 64, 'experience': 'n'}, 
    {'name': 'Diego', 'height': 60, 'experience': 'y'}, 
    {'name': 'Twee', 'height': 70, 'experience': 'n'}, 
    {'name': 'Wence', 'height': 72, 'experience': 'y'}, 
    {'name': 'Shubha', 'height': 65, 'experience': 'y'}, 
    {'name': 'Taylor', 'height': 68, 'experience': 'n'} 
] 

Die neuen dicts müssen die gleiche Anzahl von erfahrenen und unerfahrenen Personal wie diese haben:

newlist_1 = [ 
    {'name': 'Diego', 'height': 60, 'experience': 'y'}, 
    {'name': 'Jade', 'height': 64, 'experience': 'n'}, 
] 

newlist_2 = [ 
    {'name': 'Wence', 'height': 72, 'experience': 'y'}, 
    {'name': 'Twee', 'height': 70, 'experience': 'n'},   
] 

newlist_3 = [ 
    {'name': 'Shubha', 'height': 65, 'experience': 'y'}, 
    {'name': 'Taylor', 'height': 68, 'experience': 'n'} 
] 

ich die ursprüngliche Liste bin zu halten, so dass am Ende es muss insgesamt vier Kollektionen sein.

+0

> neue dicts müssen dieselbe Anzahl an erfahrenem und unerfahrenem Personal haben Sie meinen, dass neue ** Listen ** die gleiche Anzahl an erfahrenem und unerfahrenem Personal haben müssen? Gleich in 3 Listen oder gleich in jeder der drei Listen? – Daerdemandt

+0

Bedeutet das, dass die ursprüngliche Liste genau 3n dict() Elemente hat, wo n gerade ist und genau die Hälfte der Elemente Erfahrung haben: 'y' und andere Hälfte ist 'n'? – Wajahat

+0

Hi, tut mir leid, das hätte "neue Listen" sein sollen. Ich habe den Beitrag aktualisiert. Ich danke dir sehr. –

Antwort

0
def make_teams(my_list): 

    # divide the member list in two 
    experienced = list() 
    novice = list() 
    for record in my_list: 
    if record.get('experience') in ['Y','y']: 
     experienced.append(record) 
    else: 
     novice.append(record) 

    # stitch the two lists together as a list of tuples 
    teams = zip(experienced, novice) 

    # build a dictionary result starting with the member list 
    results={ 
    'members':my_list 
    } 

    # update results with each team 
    for i in range(0,len(teams)): 
    results.update(
     {'newlist_%s'%(i+1):list(teams[i])}) 

    return results 

produzieren die folgende ...

from pprint import pprint 
pprint(make_teams(mylist)) 

{'members': [{'experience': 'n', 'height': 64, 'name': 'Jade'}, 
      {'experience': 'y', 'height': 60, 'name': 'Diego'}, 
      {'experience': 'n', 'height': 70, 'name': 'Twee'}, 
      {'experience': 'y', 'height': 72, 'name': 'Wence'}, 
      {'experience': 'y', 'height': 65, 'name': 'Shubha'}, 
      {'experience': 'n', 'height': 68, 'name': 'Taylor'}], 
'newlist_1': [{'experience': 'y', 'height': 60, 'name': 'Diego'}, 
       {'experience': 'n', 'height': 64, 'name': 'Jade'}], 
'newlist_2': [{'experience': 'y', 'height': 72, 'name': 'Wence'}, 
       {'experience': 'n', 'height': 70, 'name': 'Twee'}], 
'newlist_3': [{'experience': 'y', 'height': 65, 'name': 'Shubha'}, 
       {'experience': 'n', 'height': 68, 'name': 'Taylor'}]} 
0

Versuchen Sie, die Liste der Wörterbücher in drei separate Liste Aufschneiden

list1 = mylist[0:2] 
list2 = mylist[2:4] 
list3 = mylist[4:6] 
1

Sie können 2 Listen haben - eine mit erfahrenen und eines mit unerfahrenen und bauen, was auflistet Sie davon benötigen, so etwas wie:

experienced = [worker for worker in mylist if 'y' == worker['experience']] 
inexperienced = [worker for worker in mylist if 'n' == worker['experience']] 
list1, list2, list3 = map(list, zip(experienced, inexperienced)) 
Verwandte Themen