Python词典列表问题
发布时间:2020-12-20 13:09:29 所属栏目:Python 来源:网络整理
导读:我有以下输入的词典列表: links = [ {'uid': 1,'lid': 6,'path': 'a1.txt','shareid': 1},{'uid': 1,'lid': 7,'path': 'a2.txt','shareid': 2},'lid': 8,'shareid': 1}] 我需要生成此输出: op = {'a1.txt': {'shareid': 1,'lid': [6,8]},'a2.txt': {'share
我有以下输入的词典列表:
links = [ {'uid': 1,'lid': 6,'path': 'a1.txt','shareid': 1},{'uid': 1,'lid': 7,'path': 'a2.txt','shareid': 2},'lid': 8,'shareid': 1}] 我需要生成此输出: op = {'a1.txt': {'shareid': 1,'lid': [6,8]},'a2.txt': {'shareid': 2,'lid': [7]} } 下面是我写的代码: def list_all_links(): new_list = [] result = {} for i in range(len(links)): entry = links[i] if not result.has_key(entry['path']): new_entry = {} lid_list = [] new_entry['shareid'] = entry['shareid'] if new_entry.has_key('lid'): lid_list = new_entry['lid'] lid_list.append(entry['lid']) else: lid_list.append(entry['lid']) new_entry['lid'] = lid_list result[entry['path']] = new_entry else: new_entry = result[entry['path']] lid_list = new_entry['lid'] if new_entry.has_key(entry['shareid']): new_entry['shareid'] = entry['shareid'] lid_list = new_entry['lid'] lid_list.append(entry['lid']) new_entry['lid'] = lid_list else: new_entry['shareid'] = entry['shareid'] lid_list.append(entry['lid']) new_entry['lid'] = lid_list result[entry['path']] = new_entry print "result = %s" %result if __name__ == '__main__': list_all_links() 我能够根据需要生成相同的输出.但是,有人可以指出我是否有更好的方法来解决这个问题? 解决方法
你可以使用dict的setdefault方法来缩短它
links = [ {'uid': 1,'shareid': 1} ] op = dict() for a in links: op.setdefault(a['path'],{}).update(shareid=a['shareid']) op[a['path']].setdefault('lid',[]).append(a['lid']) print op 输出: {'a2.txt': {'lid': [7],'a1.txt': {'lid': [6,8],'shareid': 1}} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |