Python合并列表中的字典内容

Python合并列表中的字典内容

【合并列表字典中相同的元素,数据元素相加】


(声明:本教程仅供本人学习使用,如有人使用该技术触犯法律与本人无关)
(如果有错误,还希望指出。共同进步)


数据示例

test_dict = [
    {
        "address": "one",
        "balance": 100
    },
    {
        "address": "two",
        "balance": 200
    },
    {
        "address": "three",
        "balance": 300
    },
    {
        "address": "one",
        "balance": 400
    }
]


Pandas 示例代码

【主要用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)

Python代码

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'))
发布了26 篇原创文章 · 获赞 2 · 访问量 1402

猜你喜欢

转载自blog.csdn.net/weixin_43633797/article/details/103630454