gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:50 24 4
gpt4 key购买 nike

我有以下列表:

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

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

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

所以对于'Anne',列表name中的第一个元素,从n1连接到它的列表是第一个元素[0, 0, 3].

同理,对于"Jack",列表name中的第二个元素,从n1开始与其相连的列表就是第二个元素[0, 5, 5],依此类推。

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

所以我希望我的输出看起来像下面这样:

{'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 中的数据与name 中的每个项目进行匹配;最简单的方法是使用 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。)

如果您的 Counter 中的键是字符串很重要,您可以使用 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})}

关于python - 使用 Counter 对象从两个列表创建字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27313711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com