加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读