【合并列表字典中相同的元素,数据元素相加】
(声明:本教程仅供本人学习使用,如有人使用该技术触犯法律与本人无关)
(如果有错误,还希望指出。共同进步)
test_dict = [
{
"address": "one",
"balance": 100
},
{
"address": "two",
"balance": 200
},
{
"address": "three",
"balance": 300
},
{
"address": "one",
"balance": 400
}
]
【主要用groupby(),但是会按值的大小降序排列,相当于一个bug】
# 导包
from pandas import DataFrame
# 转化成DataFrame类型
test = DataFrame(data=test_dict)
# 以address分组后取的balance的结果后求和(相当于数据元素相加)
df_res = test.groupby(['address'])['balance'].sum()
# 修改数据格式,同输入格式相同
result = [{
'address': i, 'balance': j} for i, j in df_res.items()]
# 打印结果
print(list_res)
def merge_data(data_dict, key_str, value_str):
"""
合并数据,以相同格式返回
:param data_dict: 待处理数据
:param key_str: 元素的key标识
:param value_str: 元素的value标识
:return: 合并后的结果
"""
key_list = []
value_list = []
# 将列表中的每个元素的key和value分离
for j in data_dict:
key_list.append(j[key_str])
value_list.append(j[value_str])
# 定义key的位置列表
index_list = []
for i in key_list:
# 存放元素在key_list中首次出现的位置
index_list.append(key_list.index(i))
# 定义返回结果
new_list = []
# 依次次拿出key在data_dict中出现的位置
for num in range(len(index_list)):
# 如果这个元素的位置大于等于结果列表中已经处理元素的总个数,说明此时是一个新元素不重复
if index_list[num] >= len(new_list):
# 添加到结果中
new_list.append({
key_str: key_list[index_list[num]], value_str: value_list[num]})
else:
# 找到已经存在的结果,加上后出现元素的值
new_list[index_list[num]][value_str] = new_list[index_list[num]][value_str] + value_list[num]
return new_list
# 示例
print(merge_data(test_dict, 'address', 'balance'))