2016-07-01 9 views
1

私は、辞書のリストを3つの新しい辞書のリストに分割するロジックを作成する必要があります。新しいリストには、経験豊富で未熟な人材が同数必要です。元のリストには、偶数の経験豊富で経験の浅い人員がいます。私はこの挑戦の論理をどのように形成するのか分かりません。ここでは短縮バージョンです:私は、元のリストを保管しておりますPythonの辞書のリストを値に応じて分割する

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'} 
] 

ので、最後にある必要がある:新しいdictsはこのような経験と経験の浅い従業員の同じ番号を持っている必要があり

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'} 
] 

合計4つのコレクションになります。

+0

>新しいdictsには、同じ数の経験豊富で未経験の人員が必要です。 新しい**リスト**には経験豊富で未経験の人員が同じである必要がありますか? 3つのリストに同じか同じ3つのリストに同じですか? – Daerdemandt

+0

元のリストには、nが偶数であり、要素のちょうど半分が経験を持っていて、正確に3 nのdict()要素があることを意味しますか? – Wajahat

+0

こんにちは、ごめんなさい、それは "新しいリスト"だったはずです。私は投稿を更新しました。どうもありがとうございます。 –

答えて

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 

は、次の...

を演出します
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

あなたは2つのリストができ

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

3つの別々のリストに辞書のリストをスライスしてみ - のようなもの、経験豊富で1や経験の浅いと一つにして、そこから必要示していますどんな構築:

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)) 
関連する問題