在嵌套循环中更新字典



在下面的代码中,我想用每行的平均价格更新fruit_dict字典。但是代码并没有像预期的那样工作。请帮助。

#!/usr/bin/python3
import random
import numpy as np
import pandas as pd
price=np.array(range(20)).reshape(5,4)  #sample data for illustration
fruit_keys = []    # list of keys for dictionary
for i in range(5):
key = "fruit_" + str(i)
fruit_keys.append(key)
# initialize a dictionary     
fruit_dict = dict.fromkeys(fruit_keys)
fruit_list = []
# print(fruit_dict)
# update dictionary values 
for i in range(price.shape[1]): 
for key,value in fruit_dict.items():
for j in range(price.shape[0]):
fruit_dict[key] = np.mean(price[j])

fruit_list.append(fruit_dict)
fruit_df = pd.DataFrame(fruit_list)
print(fruit_df)

不使用字符串模式创建字典,您可以通过只迭代行来将行平均数的值附加为字符串模式。如果你有一个具有特定模式的字典,你可以通过将键分配为你需要显示的模式来在单个循环中更新值。您不需要为创建数据帧创建额外的列表,相反,您可以参考从字典本身创建数据帧的文档。我提供了一个输出样本,可能适合你的要求。如果你需要一个以列表示平均值,以行表示水果的输出,你可以使用下面的实现:

#!/usr/bin/python3
import random
import numpy as np
import pandas as pd
row = 5
column = 4
price = np.array(range(20)).reshape(row, column)  # sample data for illustration
# initialize a dictionary
fruit_dict = {}
for j in range(row):
fruit_dict['fruit_'+str(j)] = np.mean(price[j])
fruit_df = pd.DataFrame.from_dict(fruit_dict,orient='index',columns=['mean_value'])
print(fruit_df)

这将提供如下输出。正如我已经提到的,您可以通过参考上述数据框架文档从字典中创建您想要的数据框架。

mean_value
fruit_0         1.5
fruit_1         5.5
fruit_2         9.5
fruit_3        13.5
fruit_4        17.5
`

您不应该在范围和字典项上嵌套循环,您应该一起迭代它们。您可以对enumerate()执行此操作。

你也没有使用value,所以没有必要使用items()

for i, key in enumerate(fruit_dict):
fruit_dict[key] = np.mean(price[j])

可以根据Sangeerththan提供的答案得出解决方案。

#!/usr/bin/python3
fruit_dict = {}
fruit_list =[]
price=np.array(range(40)).reshape(4,10)
for i in range(price.shape[0]):
mark_price = np.square(price[i])

for j in range(mark_price.shape[0]):
fruit_dict['proj_fruit_price_'+str(j)] = np.mean(mark_price[j])

fruit_list.append(fruit_dict.copy())

fruit_df = pd.DataFrame(fruit_list)

你可以用它来代替你的循环:

fruit_keys = []    # list of keys for dictionary
for i in range(5):
key = "fruit_" + str(i)
fruit_keys.append(key)
out = {fruit_keys[index]: np.mean(price[index]) for index in range(price.shape[0])}

输出:

{'fruit_1': '1.5', 'fruit_2': '5.5', 'fruit_3': '9.5', 'fruit_4': '13.5', 'fruit_5': '17.5'}

最新更新