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

python – 创建列表字典的单行程序

发布时间:2020-12-20 11:05:31 所属栏目:Python 来源:网络整理
导读:怎么做这个列表/字典理解 转这个[(“a”,1),(“b”,2),(“a”,3)] 进入这个 { "a": [1,3],"b": [2]} 我知道如何在for循环中执行它,我可以只使用一行来完成工作吗? 解决方法 一个简单的方法是使用一个简单的 collections.defaultdict() 列表: from collecti
怎么做这个列表/字典理解
转这个[(“a”,1),(“b”,2),(“a”,3)]

进入这个

{
  "a": [1,3],"b": [2]
}

我知道如何在for循环中执行它,我可以只使用一行来完成工作吗?

解决方法

一个简单的方法是使用一个简单的 collections.defaultdict()列表:

from collections import defaultdict

lst = [("a",("b",("a",3)]

items = defaultdict(list)
for k,v in lst:
    items[k].append(v)

print(items)

这创造了:

defaultdict(<class 'list'>,{'a': [1,'b': [2]})

注意:如果您希望最终结果是普通字典,则可以包装dict().

如果你真的想要一个衬垫,你可以在dict理解中使用itertools.groupby()

>>> from itertools import groupby
>>> from operator import itemgetter
>>> lst = [("a",3)]
>>> {k: list(map(itemgetter(1),g)) for k,g in groupby(sorted(lst,key=itemgetter(0)),key=itemgetter(0))}
{'a': [1,'b': [2]}

其中也可以更清晰地写成:

{k: [x[1] for x in g] for k,key=itemgetter(0))}

由于排序,上述解决方案具有O(NlogN)复杂性,如果要将类似项目组合在一起,则需要这样做.这比第一个defaultdict解决方案效率低,它是O(N),因为您只需要迭代列表一次.第一种解决方案更为可取,因为它更易于阅读,高效和可维护.

(编辑:李大同)

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

    推荐文章
      热点阅读