我遇到编码挑战,需要我创建一个逻辑,将字典列表划分为三个新的字典列表。新列表需要具有相同数量的经验丰富和经验不足的人员。原始名单上有偶数的经验丰富和经验不足的人员。我不知道如何形成应对这一挑战的逻辑。这是简化版:

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


新的dict需要具有相同数量的经验丰富和缺乏经验的人员,例如:

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


我保留了原始列表,因此最终总共需要四个集合。

最佳答案

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

07-28 02:49
查看更多