【发布时间】:2017-04-14 16:01:13
【问题描述】:
我正在尝试对字典中元组列表中的值组合求和。例如,我的字典包含:
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 的使用。我不确定我是否只需要修复我的代码的这一部分,或者我的方法是否偏离了基础。
【问题讨论】:
-
我似乎无法理解这个问题。该错误是由于尝试迭代不可迭代的。但是代码似乎没有接受您提供的输入。
-
什么是
mylist? -
“我认为我的错误源于“combo”” 回溯将指示错误是从哪一行引发的,我认为这与问题有关。
-
您的代码中至少有几个错误会导致问题,尽管不是您想的那样。因此,您已将名称
sum分配给您的dict理解结果。这意味着sum <= 4会抛出一个错误,即使没有,下次你尝试使用sum函数 时你将无法使用,因为sum现在是一个字典 -
另外,如果
tup是numpy.float64对象的元组,那么tup[0]是某个数字,它是不可迭代的,它会抛出你看到的错误。
标签: python tuples combinations