python_字典操作练习_更新列表中字典的键值

本文介绍了一种处理字典列表的方法,通过去重和合并具有相同ID的字典,实现了类似数据库group by的效果。文章详细解释了使用Python的浅复制、排序、while循环以及lambda函数实现这一目标的过程。

输入a, 输出b:

a = [{'id':1,'gid1':1},
     {"id":2,"gid2":2},
     {"id":1,"gid3":3}]

b = [{"id":1,'gid1':1,'gid3':3},
     {"id":2,'gid2':2}]

代码:

b = a.copy()  # 对字典a进行浅复制
b = sorted(b,
           key=lambda my_dict: my_dict['id'])  # 根据b的id 进行排序
index = 0
while index < len(b) - 1:
    if b[index]['id'] == b[index + 1]['id']:
        b[index].update(b.pop(index+1))  # 将要合并的字典直接pop()出来,然后和要合并相应的字典
        index -= 1 # 更新索引后,方便index和index+1的比较
    index += 1

Q&A:

  • 刚开始的想法是利用集合(集合内的元素不得重复),想把id1 和id2 进行像数据库的group by 进行操作失败! 将字典放入集合中,集合只汲取字典的键(谁动了我的值)
  • 尝试使用for 循环,结果由于执行时机的差异失败(在for 循环的循环体中无法改变计数器的下一个值),因为在每次合并过程中,计数器始终都是+1的,后来改用while循环,成功
  • lambda函数和if…else… 的混合使用
list(map(lambda x: 666 if x%2 else 000,[11,22,13]))
Out[7]: [666, 0, 666]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值