我刚开始学习Python并构建了一个产品评审应用程序,但是遇到了一个我无法从文档中解决的问题。
我有以下数据,我喜欢重新构造。
data = [{'Product_name': 'Razor Blade 14', 'Area': 'CPU', 'Rating': 6.15},
{'Product_name': 'Razor Blade 14', 'Area': 'Grpahics', 'Rating': 5.0},
{'Product_name': 'Razor Blade 14', 'Area': 'Screen', 'Rating': 9},
{'Product_name': 'Macbook Pro', 'Area': 'CPU', 'Rating': 8},
{'Product_name': 'Macbook Pro', 'Area': 'Graphics', 'Rating': 5.0}]我想为每个包含评级的产品生成一个列表
[
["Razor Blade 15","6.15","5.0","9"],
["Macbook Pro","9","8","5.0"]
]我试过:
super_dict = {}
for d in data:
for k, v in d.items():
super_dict.setdefault(k, []).append(v)
print(super_dict)这几乎是可行的,但并不完全是:
{'Product_name': ['Razor Blade 14', 'Razor Blade 14', 'Razor Blade 14', 'Macbook Pro', 'Macbook Pro'], 'Area': ['CPU', 'Grpahics', 'Screen', 'CPU', 'Graphics'], 'Rating': [6.15, 5.0, 9, 8, 5.0]}有什么方法可以把数据和工作转换成我需要的格式吗?
干杯
发布于 2022-04-11 18:32:05
以下是我的做法:
dict_object = {}
for datum in data:
name = datum["Product_name"]
rating = str(datum["Rating"])
dict_object.setdefault(name, [name]).append(rating)此时,dict_object是一个字典,它的键是产品的名称,值是我们想要的。
{'Razor Blade 14': ['Razor Blade 14', '6.15', '5.0', '9'],
'Macbook Pro': ['Macbook Pro', '8', '5.0']}为了得到我们想要的,我们将只取以下的值:
result = list(dict_object.values())其结果是:
[['Razor Blade 14', '6.15', '5.0', '9'], ['Macbook Pro', '8', '5.0']]这里的关键是setdefault是如何工作的:将其实现看作
def setdefault(dict_object, key, value):
if key not in self:
dict_object[key] = value
return dict_object[key]这意味着如果密钥不在字典中,那么它将使用value创建。最后,该方法返回值。
更新
为了将名称与评级分开:
dict_object = {}
for datum in data:
name = datum["Product_name"]
rating = str(datum["Rating"])
dict_object.setdefault(name, []).append(rating)
result = list(dict_object.items())结果将是
[('Razor Blade 14', ['6.15', '5.0', '9']), ('Macbook Pro', ['8', '5.0'])]发布于 2022-04-11 17:54:15
我相信一些尝试和错误会使你得到你想要的答案。
我要做以下几点:
product_ratings.setdefault(product_data'Product_name',[]).append(str(product_data'Rating'))
product name -> list of ratings product_ratings = {}字典中的评级
发布于 2022-04-11 17:47:56
迭代数据,将与产品名称相对应的评级保存在列表中的字典中,然后根据最终输出修改字典结果。
data = [{'Product_name': 'Razor Blade 14', 'Area': 'CPU', 'Rating': 6.15},
{'Product_name': 'Razor Blade 14', 'Area': 'Grpahics', 'Rating': 5.0},
{'Product_name': 'Razor Blade 14', 'Area': 'Screen', 'Rating': 9},
{'Product_name': 'Macbook Pro', 'Area': 'CPU', 'Rating': 8},
{'Product_name': 'Macbook Pro', 'Area': 'Graphics', 'Rating': 5.0}]
dic = {}
for record in data:
if record['Product_name'] not in dic:
dic[record['Product_name']] =[]
dic[record['Product_name']].append(record.get('Rating'))
result =[[k, *v] for k, v in dic.items() ]
print(result)
# [['Razor Blade 14', 6.15, 5.0, 9], ['Macbook Pro', 8, 5.0]]https://stackoverflow.com/questions/71832053
复制相似问题