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_entryprint "result = %s" %resultif __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}}总结
以上是内存溢出为你收集整理的Python词典列表问题全部内容,希望文章能够帮你解决Python词典列表问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)