对包含浮点数和字符串的列表值中的浮点数执行操作

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)

我怎样才能选择浮点数来计算平均值?

Abh*_*i_J 5

您需要将传递iterablesum()函数,所以使这些值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)