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

python – 使用Counter对象从两个列表中创建字典

发布时间:2020-12-20 11:39:12 所属栏目:Python 来源:网络整理
导读:我有以下列表: name = ["Anne","Jack","Mary"] 我还有一个嵌套列表,其中每个元素是另一个列表,并与名称列表索引中的名称相关联.如下所示: n1 = [[0,3],[0,5,5],[1,3,3]] 因此,对于’Anne’,列表名称中的第一个元素,连接到它的n1列表是第一个元素[0,3]. 类
我有以下列表:

name = ["Anne","Jack","Mary"]

我还有一个嵌套列表,其中每个元素是另一个列表,并与名称列表索引中的名称相关联.如下所示:

n1 = [[0,3],[0,5,5],[1,3,3]]

因此,对于’Anne’,列表名称中的第一个元素,连接到它的n1列表是第一个元素[0,3].

类似地,对于“Jack”,列表名称中的第二个元素,连接到它的n1的列表是第二个元素[0,依此类推.

我想计算n1的每个元素中每个数字的出现次数,并以字典格式将其连接到名称列表中的名称.

所以我希望我的输出看起来如下所示:

{'Anne': {'0': 2,'3': 1},'Jack': {'0': 1,'5': 2},'Mary': {'1': 1,'3': 2}}

我试过以下:

from collections import Counter
      clust = {}
      for val in name:
         clust[val] = {}
         for e in n1:
             wc = Counter(str(e1) for e1 in e)
             clust[val] = dict(wc)

但这给了我输出:

clust = {'Anne': {'1': 1,'3': 2},'Jack': {'1': 1,'3': 2}}

这是不正确的.如何实现我想要的输出?

解决方法

您需要将n1中的数据与名称中的每个项目进行匹配;最简单的方法是使用 zip

>>> from collections import Counter
>>> name = ["Anne","Mary"]
>>> n1 = [[0,3]]
>>> {name_: Counter(data) for name_,data in zip(name,n1)}
{'Anne': Counter({0: 2,3: 1}),'Jack': Counter({5: 2,0: 1}),'Mary': Counter({3: 2,1: 1})}

(注意使用“字典理解”,见the docs.)

如果计数器中的键是字符串是至关重要的,则可以在计数之前使用map转换整数:

>>> {name_: Counter(map(str,data)) for name_,n1)}
{'Anne': Counter({'0': 2,'3': 1}),'Jack': Counter({'5': 2,'0': 1}),'Mary': Counter({'3': 2,'1': 1})}

(编辑:李大同)

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

    推荐文章
      热点阅读