合併列表中的字典相關小例子

輸入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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章