lin*_*rge 3 python dictionary python-3.x
我在 Python 3 中有一个字典,其中所有键值对都具有以下结构:
my_dict = {'Jerry': [0.4, 'Queens', 0.6, 'Knicks']}
Run Code Online (Sandbox Code Playgroud)
这意味着该值始终是一个包含 float、string、float、string 的列表。
我需要修改这些值,以便对两个浮点数求平均值,并且新字典如下所示:
new_dict = {'Jerry': [0.5, 'Queens', 'Knicks]}
Run Code Online (Sandbox Code Playgroud)
我尝试了一个for循环,根据它们的索引从值列表中选择浮点数,但是 Python 不允许我通过它进行索引。
for k, v in my_dict.items():
average = sum(v[0], v[1])/2
my_dict[k] = [average, v[1], v[3]]
Run Code Online (Sandbox Code Playgroud)
这返回
TypeError: 'float' object is not iterable
Run Code Online (Sandbox Code Playgroud)
我怎样才能选择浮点数来计算平均值?
您需要将传递iterable给sum()函数,所以使这些值v[0],并v[1]通过添加到列表中[,并]
my_dict = {'Jerry': [0.4, 'Queens', 0.6, 'Knicks']}
for k, v in my_dict.items():
average = sum([v[0], v[2]])/2
my_dict[k] = [average, v[1], v[3]]
print(my_dict)
Run Code Online (Sandbox Code Playgroud)
输出:
{'Jerry': [0.5, 'Queens', 'Knicks']}
Run Code Online (Sandbox Code Playgroud)
my_dict = {'Jerry': [0.4, 'Queens', 0.6, 'Knicks'], 'Berry': [0.5, 'Queens', 0.1, 'Knicks']}
my_dict = {k:[(v[0]+v[2])/2, v[1], v[3]] for k,v in my_dict.items()}
print(my_dict)
Run Code Online (Sandbox Code Playgroud)
输出:
{'Jerry': [0.5, 'Queens', 'Knicks'], 'Berry': [0.3, 'Queens', 'Knicks']}
Run Code Online (Sandbox Code Playgroud)