Python 字典列表问题

标签 python

我有以下字典列表的输入:

    links = [ {'uid': 1, 'lid': 6, 'path': 'a1.txt', 'shareid': 1},
      {'uid': 1, 'lid': 7, 'path': 'a2.txt', 'shareid': 2},
      {'uid': 1, 'lid': 8, 'path': 'a1.txt', '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()

我能够生成所需的相同输出。但是,如果有更好的方法来解决这个问题,有人可以指出我吗?

最佳答案

可以使用dictsetdefault方法来缩短

links = [
  {'uid': 1, 'lid': 6, 'path': 'a1.txt', 'shareid': 1},
  {'uid': 1, 'lid': 7, 'path': 'a2.txt', 'shareid': 2},
  {'uid': 1, 'lid': 8, 'path': 'a1.txt', '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], 'shareid': 2}, 'a1.txt': {'lid': [6, 8], 'shareid': 1}}

关于Python 字典列表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34745591/

相关文章:

python - 为什么我的 scrapy 蜘蛛不遵循我的项目解析函数中的请求回调?

python - WxPython wxSplitterWindow.SplitVertically 总是显示不均匀分割

Python 用一个公共(public)列连接两个框架

python - Python 的 If else 逻辑中的困惑

python - 将 python django 项目 1.3 升级到 1.5

python - 异常子类的打印不是参数元组

python - 在oracle SQL*PLUS中执行Python脚本

python, 信号阻塞, 数据库

python - 谁能帮我找出这段代码有什么问题吗?相同RNA序列匹配程序

Python:使用 stdout 捕获 subprocess.call 的输出