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

2024-10-01 13:37:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python 3中的字典,其中所有键值对都具有以下结构:

my_dict = {'Jerry': [0.4, 'Queens', 0.6, 'Knicks']}


这意味着该值始终是一个带有float、string、float、string的列表

我需要修改这些值,以便将两个浮点值平均,并且新字典如下所示:

new_dict = {'Jerry': [0.5, 'Queens', 'Knicks]}

我尝试了一个for循环,该循环根据浮点值的索引从值列表中选择浮点值,但Python不允许我对其进行索引

for k, v in my_dict.items():
    average = sum(v[0], v[1])/2
    my_dict[k] = [average, v[1], v[3]]

这是回报


TypeError: 'float' object is not iterable

我如何选择浮动来计算平均值


Tags: 列表newforstring字典myfloat结构
3条回答

您需要将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)

输出:

{'Jerry': [0.5, 'Queens', 'Knicks']}

还是一个较短的解决方案

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)

输出:

{'Jerry': [0.5, 'Queens', 'Knicks'], 'Berry': [0.3, 'Queens', 'Knicks']}

^{}的第一个参数应该是一个iterable(例如,一个列表)

您可以按照@abhi-j的建议使用average = sum([v[0], v[2]])/2,也可以只使用average = (v[0]+v[2])/2

迭代keyvalue对,创建一个临时列表来存储数字和字符串数据,迭代每个值列表并基于type附加到numbers/strings列表,最后找到average并将其添加到结果字典中

my_dict = {'Jerry': [0.4, 'Queens', 0.6, 'Knicks']}
result = {}

for key,value in my_dict.items():
    numbers = []
    strings =[]
    for item in value:
        if type(item) is float:
            numbers.append(item)
        else:
            strings.append(item)
    result[key] = [sum(numbers)/len(numbers)] + strings

输出

{'Jerry': [0.5, 'Queens', 'Knicks']}

PS:即使给定词典的值列表中的项数或多或少,此解决方案也会起作用

相关问题 更多 >