gpt4 book ai didi

Python 使用组合对字典列表中的元组中的值求和?

转载 作者:行者123 更新时间:2023-11-28 18:23:15 24 4
gpt4 key购买 nike

我正在尝试对字典中的元组列表中的值组合求和。例如,我的字典包含:

dict = {1: [(2, 2), (4, 3), (6, 1), (7, 1), (8, 3)], 2: [(4, 1), (5, 3), (1, 2)],...} 

然后继续进行多个条目。我正在尝试对每个条目的元组的第二个值求和,这些组合的总和最多为 4。因此对于条目 1,所需的输出将是:

{1: [(2, 6, 3), (2, 7, 3), (4, 6, 4), (4, 7, 4), (6, 7, 2), (8, 6, 4), (8, 7, 4)]

其中,此元组中的第三个值是前一个元组的第二个值的组合之和,此元组的第一个和第二个值是前一个元组的关联第一个值。

我试过下面的代码:

for key, value in dict.items():
object1 = key
mylist = value
for tup in mylist:
object2 = tup[0]
pair = tup[1]
combo = itertools.combinations(tup[1],2)
sum = {k:sum(j for _,j in v) for k,v in combo}
if sum <= 4:
print(sum)

我得到了错误

'numpy.float64' object is not iterable

我认为我的错误源于“组合”以及可能是我对 itertools 的使用。我不确定我是否只需要修复我的代码的这一部分,或者我是否偏离了我的方法。

最佳答案

是的,你可以用 itertools.combinations 做到这一点,但你必须向它传递正确的参数。 :) 您需要将元组列表传递给它,以便它可以生成元组对。您可以通过理解来做到这一点,但我认为使用传统的 for循环使其更易于阅读。

正如其他人所提到的,除了没有将正确的东西传递给 combinations 之外,您的代码还有其他问题。 .最主要的是您要为名称 sum 分配字典。 , 它遮蔽了 sum您也尝试使用的内置功能。而且您还尝试将该字典与整数 4 进行比较,这没有多大意义。 :)

无论如何,这里有一些代码可以满足您的需求。请注意,在您的预期输出中,您弄乱了最后两个元组:(8, 6, 4)(8, 7, 4)应该是 (6, 8, 4)(7, 8, 4) , 分别。

from itertools import combinations

a = {
1: [(2, 2), (4, 3), (6, 1), (7, 1), (8, 3)],
2: [(4, 1), (5, 3), (1, 2)],
}

new_dict = {}

for k, seq in a.items():
c = []
for (u,v), (x,y) in combinations(seq, 2):
total = v + y
if total <= 4:
c.append((u, x, total))
new_dict[k] = c

for k, seq in new_dict.items():
print(k, seq)

输出

1 [(2, 6, 3), (2, 7, 3), (4, 6, 4), (4, 7, 4), (6, 7, 2), (6, 8, 4), (7, 8, 4)]
2 [(4, 5, 4), (4, 1, 3)]

combinations(seq, 2)产生成对的元组,我们可以将这些元组解压成它们各自的数字

for (u,v), (x,y) in combinations(seq, 2):

我们可以做类似的事情

for t0, t1 in combinations(seq, 2):

然后解压t0t1元组在一个单独的步骤中,或者只是使用索引来获取它们的项目。例如,

for t0, t1 in combinations(seq, 2):
total = t0[1] + t1[1]
if total <= 4:
c.append((t[0], t[1], total))

但我认为以前的方式不那么困惑。


但是如果你坚持用推导来做这一切,你可以:

new_dict = {k: [(u, x, v+y) for (u,v), (x,y) in combinations(seq, 2) if v+y <= 4]
for k, seq in a.items()}

请注意,这比以前的版本效率低,因为它计算 v+y通过 v+y <= 4 的每个组合两次测试。

关于Python 使用组合对字典列表中的元组中的值求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43415114/

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