gpt4 book ai didi

python - 如何创建具有某些特定值行为的字典

转载 作者:太空狗 更新时间:2023-10-30 02:13:02 25 4
gpt4 key购买 nike

假设我有两个列表:

l1 = [['b', (1, 1)], ['b', (1, 2)], ['b', (1, 3)], ['a', (1, 5)],
['b', (2, 1)], ['b',(3, 1)]]

l2 = ['A','B','C']

如何创建这种格式的字典?

dct = {'A': len(sublist1), 'B': len(sublist2), 'C' : len(sublist3)}

在哪里

sublist1 = [['b', (1, 1)], ['b', (1, 2)], ['b', (1, 3)], ['a', (1, 5)]]
sublist2 = [['b', (2, 1)]]
sublist3 = [['b',(3, 1)]]

如果我的 l1 如下所示会发生什么:

ls1 = [[(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2)]]    

那么我的输出应该是:

dct = {'A': len(sublist1), 'B': len(sublist2)}

在哪里

sublist1 = [[(1, 1),(1, 2),(1, 3),(1, 4)]]
sublist2 = [[(2, 1),(2, 2),(2, 3)]]

能否通过泛型的方式解决整体问题?

最佳答案

这似乎可行:

from itertools import groupby

key = lambda x: x[1][0]
lens = [len(list(g)) for k, g in groupby(sorted(l1, key=key), key=key)]
dct = dict(zip(l2, lens))

我希望当我假设 A 与 1 匹配,B 与 2 匹配等等时,我的推断是正确的。

回复:OP 编辑​​

我不知道你的 sublist2 中的 (2, 3) 项目来自哪里,我认为这是一个错误。此外,我假设单个元素列表 ls1 实际上是元组的直接容器,因为在这里使用嵌套列表没有任何意义。如果是这样,这是我对通用解决方案的建议:

from itertools import groupby
from string import ascii_uppercase

key = lambda x: x[0]
lens = [len(list(g)) for k, g in groupby(sorted(l1, key=key), key=key)]
dct = dict(zip(ascii_uppercase, lens))

所以,没有大的变化。 zip 函数将在给定长度不等的参数时返回与最短参数长度相同的列表,这种行为在这种情况下非常适合我们。

请记住,如果第一个元组元素的不同值超过 26 个,则此解决方案将失效,并忽略任何大于第 26 个的值。

关于python - 如何创建具有某些特定值行为的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11739170/

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