python counter转换为列表_python – 使用Counter对象从两个列表中创建字典

我有以下列表:

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

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

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

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

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

我想计算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}, 'Mary': {'1': 1, '3': 2}}

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

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

zip:

>>> from collections import Counter

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

>>> n1 = [[0,0,3], [0,5,5], [1,3,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_, data in zip(name, n1)}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值