当前位置 : 主页 > 编程语言 > python >

24Django与文章留言有关的知识点逻辑面试题

来源:互联网 收集:自由互联 发布时间:2022-07-13
python开发岗笔试题: 小学春游 - 两组同学,每组1-3人,每组有一个队长;春游期间,由于景点人数较多,秩序混乱,班主任要求在指定地点,按组集合 #源数据 s = [{'name':'leader-1','belong

python开发岗笔试题:
小学春游 - 两组同学,每组1-3人,每组有一个队长;春游期间,由于景点人数较多,秩序混乱,班主任要求在指定地点,按组集合

#源数据
s = [{'name':'leader-1','belong_to':None},{'name':'jack','belong_to':'leader-2'},{'name':'lili','belong_to':'leader-1'},{'name':'leader-2','belong_to':None},{'name':'Tom', 'belong_to':'leader-1'}]
#目标数据
d = [
{'name':'leader-1', 'team':[{'name':'lili'},{'name':'Tom'}]},
{'name':'leader-2', 'team':[{'name':'jack'}]}
]
请用python代码实现分组:

1先把数组里的字典遍历出来,如果字典里的belong_to存在,就把这个belong_to 的值作为key初始化一个我们需要的字典样式

def find_team(data):
leader_lst = []
s_dict = {}
for d in data:
if d['belong_to']:
s_dict.setdefault(d['belong_to'],[])
print(s_dict)
find_team(s)

运行结果:
{'leader-2': [], 'leader-1': []}

2再次分析原始数据:

s = [{'name':'leader-1','belong_to':None},{'name':'jack','belong_to':'leader-2'},{'name':'lili','belong_to':'leader-1'},{'name':'leader-2','belong_to':None},{'name':'Tom', 'belong_to':'leader-1'}]
for i in s:
print(i)
结果:
{'name': 'leader-1', 'belong_to': None}
{'name': 'jack', 'belong_to': 'leader-2'}
{'name': 'lili', 'belong_to': 'leader-1'}
{'name': 'leader-2', 'belong_to': None}
{'name': 'Tom', 'belong_to': 'leader-1'}

通过遍历,我们获得了一个一个的字典,如果我要把name值从字典你里取出来,应该是这样的:

for d in s:
print(d['name'])

3有了上面基础分析后我们就可以组装数据了

已知我们已经通过方法s_dict.setdefault(d['belong_to'],[]),定义出来了我们想要的样式:

s_dict = {'leader-2': [], 'leader-1': []}

那么我要实现 {'leader-2': ['name':'lily'], 'leader-1': ['Tom']}这样的效果,只需要:

s_dict['d['belong_to']'].append({'name':d['name']})

def find_team(data):
leader_lst = []
s_dict = {}
for d in data:
if d['belong_to']:
s_dict.setdefault(d['belong_to'],[])
s_dict['d['belong_to']'].append({'name':d['name']})
print(s_dict)
find_team(s)

运行结果:
{'leader-2': [{'name': 'jack'}], 'leader-1': [{'name': 'lili'}, {'name': 'Tom'}]}

通过以上3步我们就把同学分组成功啦,如果字典里的belong_to不存在,那么这个人肯定就是队长啦,那么我们就组装我们需要的数据格式:leader_lst = [{'name':'leader-1', 'team':[]},{'name':'leader-2', 'team':[]}]

def find_team(data):
leader_lst = []
s_dict = {}
for d in data:
if d['belong_to']:
s_dict.setdefault(d['belong_to'],[])
s_dict[d['belong_to']].append({'name':d['name']})
else:
leader_lst.append({'name':d['name'],'team':[]})
print(s_dict)
print(leader_lst)
find_team(s)

结果:
#s_dict
{'leader-2': [{'name': 'jack'}], 'leader-1': [{'name': 'lili'}, {'name': 'Tom'}]}
#leader_lst
[{'name': 'leader-1', 'team': []}, {'name': 'leader-2', 'team': []}]

4拼装数据完成最终想要的效果:

#目标数据
d = [
{'name':'leader-1', 'team':[{'name':'lili'},{'name':'Tom'}]},
{'name':'leader-2', 'team':[{'name':'jack'}]}
]

先循leader_lst,如果leader_lst里的['name']值在字典s_dict里,那么就就把s_dict里的name值取出来放到leader_lst里,即:

for l in leader_lst:
if l['name'] in s_dict:
l['team'] = s_dict[l['name']]

解释:

因为我们事先定义了s_dict = { },所以

s_dict[l['name']] == {‘name’:l['name']] }

最终程序代码:

def find_team(data):
leader_lst = []
s_dict = {}
for d in data:
if d['belong_to']:
s_dict.setdefault(d['belong_to'],[])
s_dict[d['belong_to']].append({'name':d['name']})
else:
leader_lst.append({'name':d['name'],'team':[]})


for l in leader_lst:
if l['name'] in s_dict:
l['team'] = s_dict[l['name']]
return leader_lst
print(find_team(s))

结果:
[{'name': 'leader-1', 'team': [{'name': 'lili'}, {'name': 'Tom'}]}, {'name': 'leader-2', 'team': [{'name': 'jack'}]}]

 



网友评论