2016-07-01 94 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)) 
相关问题