欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中使用遍歷在列表中添加字典遇到的坑

 更新時間:2019年02月27日 09:10:23   作者:YOYO__2018  
今天小編就為大家分享一篇關(guān)于Python中使用遍歷在列表中添加字典遇到的坑,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
"""
已知列表li = [{"key": 5}, {"key": 9}, {"key": -1}, {"key": 4}] ,
定義一個函數(shù),將該列表按照其元素的value
值進(jìn)行排序,并輸出結(jié)果
"""

思路很清晰,新建一個列表,然后遍歷取出字典的值加入到新的列表中,再通過遍歷,賦值字典,使用append方法依次添加到列表,這樣就是一個按照value值排續(xù).于是有了下面的代碼:

li = [{"key": 5}, {"key": 9}, {"key": -1}, {"key": 4}]
def fun(li):
  li_1 = [] # 接收value值
  li_2 = [] # 接收新的字典
  dict_1 = {}
  for i in range(len(li)):
    li_1.append(li[i]["key"])
  li_1.sort() # 排序
  for i in li_1:
    dict_1["key"] = i
    print(dict_1)
    li_2.append(dict_1)
  return li_2
print(fun(li))

但是運行的結(jié)果卻是:

[{'key': 9}, {'key': 9}, {'key': 9}, {'key': 9}]

很明顯,取值被最后一個傳入value的9全部替換了.為什么會這樣呢?

開始懷疑是不是和字典中重復(fù)賦值給"key"有關(guān),但是也不應(yīng)該啊,每次遍歷的時候就是已經(jīng)把字典append到list中去了啊!

于是使用print(id(dict_1)),查看內(nèi)存信息,發(fā)現(xiàn)這個現(xiàn)象:

2874566784272
2874566784272
2874566784272
2874566784272

居然都是同一地址!!再查看list中的每個元素地址:

for i in li_2:
print(id(i))

結(jié)果:(print(id(dict_1))也打印了)

2501747356944
2501747356944
2501747356944
2501747356944
2501747356944
2501747356944
2501747356944
2501747356944

于是明白了,因為每次添加的都是同一個內(nèi)存到list中去了,dict_1每次寫入的時候改變了內(nèi)存中的value,但是地址不變,即是,創(chuàng)建了一次內(nèi)存空間,只會不斷的改變value了.完善方法:每次遍歷時候創(chuàng)建一個新的dict_1.

代碼:

def fun(li):
  li_1 = []
  li_2 = []
  for i in range(len(li)):
    li_1.append(li[i]["key"])
  li_1.sort() # 排序
  for i in li_1:
dict_1 = {} # 每次遍歷時創(chuàng)建一個新的內(nèi)存
    dict_1["key"] = i
    li_2.append(dict_1)
  return li_2
print(fun(li))

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • 用opencv給圖片換背景色的示例代碼

    用opencv給圖片換背景色的示例代碼

    這篇文章主要介紹了用opencv給圖片換背景色的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Python生成驗證碼實例

    Python生成驗證碼實例

    這篇文章主要介紹了Python生成驗證碼的方法,具有很好的實用價值,代碼結(jié)構(gòu)清晰易懂,需要的朋友可以參考下
    2014-08-08
  • 分享6個好用到爆的Pycharm插件

    分享6個好用到爆的Pycharm插件

    這篇文章主要介紹了分享6個好用到爆的Pycharm插件,在安裝上之后,我們的編程效率、工作效率都能夠得到極大地提升,下面分享的內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • Python attrs提高面向?qū)ο缶幊绦试敿?xì)

    Python attrs提高面向?qū)ο缶幊绦试敿?xì)

    Python是面向?qū)ο蟮恼Z言,一般情況下使用面向?qū)ο缶幊虝沟瞄_發(fā)效率更高,軟件質(zhì)量更好,并且代碼更易于擴(kuò)展,可讀性和可維護(hù)性也更高,但是Python的類寫起來是真的累,這是可以在創(chuàng)建類的時候自動添加上attrs模塊,下面文章我們就來介紹這個東西,需要的朋友可參考一下
    2021-09-09
  • Python庫textract提取各種文檔類型中文本數(shù)據(jù)

    Python庫textract提取各種文檔類型中文本數(shù)據(jù)

    Python的textract庫是一個強大的工具,它可以從各種文檔類型中提取文本數(shù)據(jù),無論是PDF、Word文檔、圖片還是其他格式的文件,textract都可以輕松地將文本提取出來,本文將詳細(xì)介紹textract的功能和用法,并提供豐富的示例代碼來幫助大家深入了解
    2024-01-01
  • 分享一個python的aes加密代碼

    分享一個python的aes加密代碼

    這篇文章主要介紹了分享一個python的aes加密代碼,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-12-12
  • python游戲?qū)崙?zhàn)項目之俄羅斯方塊的魅力

    python游戲?qū)崙?zhàn)項目之俄羅斯方塊的魅力

    遲早一定會掛掉的俄羅斯方塊,為什么至今仍是世界游戲之王?它是怎么編寫的?本文將給大家詳細(xì)的介紹,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值
    2021-09-09
  • Python運算符重載的簡單實例代碼

    Python運算符重載的簡單實例代碼

    什么是運算符重載,就是讓自定義的類生成的對象(實例)能夠使用運算符進(jìn)行操作,這篇文章主要給大家介紹了關(guān)于Python運算符重載的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • OpenCV 使用imread()函數(shù)讀取圖片的六種正確姿勢

    OpenCV 使用imread()函數(shù)讀取圖片的六種正確姿勢

    這篇文章主要介紹了OpenCV 使用imread()函數(shù)讀取圖片的六種正確姿勢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論