合并列表中的字典相关小例子

输入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 += 1

遇到的问题及解答:

  • 刚开始的想法是利用集合(集合内的元素不得重复),想把id1 和id2 进行像数据库的group by 进行操作失败! 将字典放入集合中,集合只汲取字典的键(谁动了我的值)
  • 在使用sorted() 函数是,对key的认识不够,使用key=a['id'] 出错
  • 其次想要构建列表b,发现肯定麻烦,直接pass
  • eureka, 发现神奇的update() 函数
  • 浅拷贝只拷贝列表对象的父对象
  • 尝试使用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]
  • 在不断的尝试中发现应该原地操作a,so 浅拷贝了a
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章