我有这样一个数组。你知道吗
items = [
{
"title": "title1",
"category": "category1",
"value": 200
},
{
"title": "title2",
"category": "category2",
"value": 450
},
{
"title": "title3",
"category": "category1",
"value": 100
}
]
这个数组由许多具有category
和value
属性的字典组成。
使用value
求和得到category对象数组的健壮方法是什么:
data= [
{
"category": "category1",
"value": 300
},
{
"category": "category2",
"value": 450
}
]
我在寻找最好的算法或方法,既适用于小阵列,也适用于大阵列。如果有一个现有的算法,请指出我的来源。你知道吗
我试过什么??你知道吗
data = []
for each item in items:
if data has a dictionary with dictionary.category == item.category:
data's dictionary.value = data's dictionary.value + item.value
else:
data.push({"category": item.category, "value":item.value})
注:欢迎使用任何编程语言。请在投票前发表评论。你知道吗
在Python中,Pandas可能是一种更方便、更高效的方法。你知道吗
对于最后一步,将
sums
保留为数据帧并像这样使用它可能更方便,而不是转换回字典列表。你知道吗您需要的是一个类似SQL
group by
的操作。通常,那些group by
操作是用哈希算法处理的。如果您的所有数据都可以放入内存(从小到大的数据结构),那么您可以非常快速地实现它。你知道吗如果数据结构庞大,则需要使用中间内存(如硬盘或数据库)。你知道吗
一种简单的python方法是:
如果您想要更多pythonic代码,可以使用
defaultdict
:在javascript中,可以使用
reduce
将数组分组到对象中。使用类别作为属性。使用Object.values
将对象转换为数组。你知道吗var items = [{ "title": "title1", "category": "category1", "value": 200 }, { "title": "title2", "category": "category2", "value": 450 }, { "title": "title3", "category": "category1", "value": 100 } ]; var data = Object.values(items.reduce((c, v) => { c[v.category] = c[v.category] || {category: v.category,value: 0}; c[v.category].value += v.value; return c; }, {})); console.log(data);
;相关问题 更多 >
编程相关推荐