2016-07-01 90 views
1

我有一個編碼挑戰,需要我創建一個邏輯,將字典列表分成三個新的字典列表。新名單需要有相同數量的經驗豐富和缺乏經驗的人員。最初的名單中有偶數的經驗豐富和缺乏經驗的人員。我不知道如何形成這一挑戰的邏輯。這裏是一個縮短版:根據值對Python中的字典列表進行分區

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

新類型的字典需要有經驗和沒有經驗的人員的數量相等這樣的:

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

我保持原來的列表,所以到底有需要共有四個集合。

+0

>新詞典需要有相同數量的經驗豐富且缺乏經驗的人員 您是說新的**詞典**需要有相同數量的經驗豐富且缺乏經驗的人員? 3個列表中的每個列表中是否相同? – Daerdemandt

+0

這是否意味着原始列表恰好有3n個dict()元素,其中n是偶數,並且恰好有一半元素具有經驗:'y'和另一半是'n'? – 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

嘗試切片詞典列表分爲三個單獨的列表

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

你可以有2只列出了 - 一個有經驗的,一個沒有經驗和建立你需要的任何列出,類似:

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)) 
相關問題