我是Python的新手,正试图从具有列表格式值的字典创建新字典。下面请找到我的代码:
dataset = {
"a" : [3, 1, 7, 5, 9],
"b" : [4, 8, 7, 5, 3],
"c" : [3, 4, 1, 0, 0],
"d" : [0, 5, 1, 5, 5],
"e" : [3, 7, 5, 5, 1],
"f" : [3, 6, 9, 2, 0],
}
for v in dataset.values():
total = (sum(v))
print(total)
for k in dataset:
print(k)
dict1 = {k:total for k in dataset}
print(dict1)
我的预期结果是{"a":25, "b":27, ..}
。
相反,当我运行代码时,输出为
{'a': 20, 'b': 20, 'c': 20, 'd': 20, 'e': 20, 'f': 20}
我可以知道我错了哪一部分代码吗?
答案 0 :(得分:0)
这是因为total
被设置为for v in dataset.values()
循环中的最后一个值。你应该尝试
dict1={k: sum(v) for k,v in dataset.items()}
答案 1 :(得分:0)
您只是将最后一个total
存储在解决方案中。尝试这样做:
dataset = {
"a" : [3, 1, 7, 5, 9],
"b" : [4, 8, 7, 5, 3],
"c" : [3, 4, 1, 0, 0],
"d" : [0, 5, 1, 5, 5],
"e" : [3, 7, 5, 5, 1],
"f" : [3, 6, 9, 2, 0],
}
dict1 = {k: sum(v) for k, v in dataset.items()}
print(dict1)
答案 2 :(得分:0)
“总计”在每次迭代后发生变化。每次您通过字典中的值取和时,您都会得到一个新的总数。因此,当循环结束时,total是字典中最后一个列表的总和。
您要使字典中的每个键都具有最后一个列表的合计值。相反,您应该为要计算总数的循环内的每个键分配总数。
答案 3 :(得分:0)
尝试这个。
dataset = {
"a" : [3, 1, 7, 5, 9],
"b" : [4, 8, 7, 5, 3],
"c" : [3, 4, 1, 0, 0],
"d" : [0, 5, 1, 5, 5],
"e" : [3, 7, 5, 5, 1],
"f" : [3, 6, 9, 2, 0],
}
result = {}
for (k, v) in dataset.items():
result[k] = sum(v)
print (result)
输出: {'a':25,'c':8,'b':27,'e':21,'d':16,'f':20}
答案 4 :(得分:0)
您要为total
中的每个值列表设置一次dataset
,但是当您使用字典理解来创建dict1
时,仅使用了最后一个计算值total
中的一个,恰好是20。(没有排序顺序,所以total
可能以您的总和值结尾,具体取决于访问值的顺序是什么。)
相反,您可以使用方便的函数items()
将所有操作都一行完成,该函数将字典变成对应键和值的成对(即2个元组)列表。因此,您可以像这样重写dict1
代码:
dict1 = {k: sum(v) for (k, v) in dataset.items()}
答案 5 :(得分:0)
运行代码的以下部分时,将针对数据集字典中的每个值更新总计,然后将总计更新为字典中最后一个元素的总和,即[3, 6, 9, 2, 0]
,因此total=20
for v in dataset.values():
total = (sum(v))
print(total)
然后,当您执行dict1 = {k:total for k in dataset}
时,dict1的所有值均为20`。
两种简化方法。
total = []
dict1 = {}
for k, v in dataset.items():
total = sum(v)
dict1[k] = total
print(dict1)
#{'a': 25, 'b': 27, 'c': 8, 'd': 16, 'e': 21, 'f': 20}
total = []
dict1 = {}
#Create the list of sums
for v in dataset.values():
total.append(sum(v))
idx = 0
#Use that list of sums to create the output dictionary
for k in dataset.keys():
dict1[k] = total[idx]
idx+=1
print(dict1)
#{'a': 25, 'b': 27, 'c': 8, 'd': 16, 'e': 21, 'f': 20}