Python修改巢狀字典的key值

2022-09-03 00:03:16 字數 3764 閱讀 8507

最近在搞介面測試的時候發現了乙個比較有趣的json入引數,結構如下:

json = , , , }}]}]}]}], "gg": "33"}

觀察該json資料,我們發現有大量的相同的key(gg),並且這些key的value值都是一樣的,那麼我們需要修改所有key(gg)的值,應該怎麼做呢?

提問:為什麼會有這麼有趣的入引數據?

我也不知道,因為公司的出庫單的業務資料就有這麼可怕和奇葩的資料,只是沒有本文中舉例的那麼誇張

第一:我們可以把這個資料封裝成乙個函式,實現如下所示:

def

data(gg):

dict_data = , , , }}]}]}]}], 'gg'

: gg}

return

dict_data

print(data('

hahaha

'))

這樣很完美的解決我們的問題了。完美,解題結束......enenen、但是這會引生出另乙個問題,就是每次介面改動需要去修改**,不便於工具化(雖然在介面自動化後介面不太可能會發生改動),

對於測試來說不可能人人都去搞工具化,但是你不能沒有乙個工具化的心。

ok,目標明確了,那麼我們需要搞個好的思路了,但是在這之前我們不得不先了解一下python對於字典的操作:

首先,最簡單的方法是直接建立字典,dict=

再次,先建立乙個空字典,然後對字典進行賦值或者修改,具體如下圖所示:

從上圖中可以看出,我們是可以直接對字典進行操作的結構為dict["key"] = value,dict["key"] 表示字典的key,value表示key的值,簡單點說就是字典裡面的元素,

以及元素的值是什麼,但是有一點要清楚,字典裡面key的值它可以是乙個字串,可以是數字,可以是列表,可以是字典。(說明:在python中json串可以理解是乙個字典)。

不難理解,我們在上圖中直接對乙個空字典定義了元素和元素值,那麼對巢狀字典改如何進行操作呢?這裡以比較有趣的json入引數來進行講解:

如上圖所示,每乙個需要修改的key都需要指明路徑,所以非常麻煩,非常難搞,隨著明細的增加,說不定形同名稱的key還會更多,然後有需要手動指明,

這種方法還不如用函式去修改key的值,所以還需要再想想辦法。

dict_data = , , , }}]}]}]}], '

gg': 'gg'

}key = 'gg'

defupdate(key,dict_data):

#判斷需要修改的key是否在初始字典中,在則修改

if key in

dict_data:

#將key為'gg'的值修改成'張三'

dict_data[key]='張三'

#print(dict_data)

#迴圈字典獲取到所有的key值和value值

for keys,values in

dict_data.items():

#判斷valus值是否為列表或者元祖

ifisinstance(values,(list,tuple)):

#迴圈獲取列表中的值

for i in

values:

#判斷需要修改的值是否在上乙個迴圈出的結果中,在則修改

if key in i and

isinstance(i,dict):

#呼叫自身修改函式,將key的值修改成'張三'

update(key,i)

else

:

#否者則呼叫獲取value函式

get_value(i)

elif

isinstance(values,dict):

if key in

values:

update(key,values)

else

:

for keys,values in

values.items():

ifisinstance(values,dict):

update(key, values)

else

:

#迴圈獲取原始字典的values值

for keys,values in

dict_data.items():

#判斷values值是否是列表或者元祖

ifisinstance(values,(list,tuple)):

#如果是列表或者元祖則迴圈獲取裡面的元素值

for i in

values:

#判斷需要修改的key是否在元素中

if key in

i:

#呼叫修改函式修改key的值

update(key,i)

else

:

#否則呼叫獲取values的值函式

get_value(i)

#判斷values值是否為字典

elif

isinstance(values,dict):

#判斷需要修改的key是否在values中

if key in

values:

#呼叫修改函式修改key的值

update(key,values)

else

:

#獲取values值的函式

get_value(values)

return

dict_data

defget_value(tt):

#迴圈獲取values的值

for values in

tt.values():

#判斷迴圈出的value的值是否為列表或者元祖

ifisinstance(values, (list,tuple)):

#如果為列表或者元祖則迴圈獲取列表或者元祖中的值

for i in

values:

#判斷需要修改的值是否在迴圈出的值中,且i為字典

if key in i and

isinstance(i,dict):

#呼叫修改函式,將key的值修改為'張三'

update(key, i)

else

:

#否則呼叫獲取value函式

get_value(i)

elif

isinstance(values,dict):

if key in

values:

update(key, values)

else

: get_value(values)

update(key,dict_data)

如上圖**所示:總的來說就是將字典迴圈判斷曲直並修改,然後就完事了咯。

這樣做的好處是,我們在做介面自動化的時候可以將資料與指令碼分離,只需在excel中維護好入參,指定獲取返回變數值即可

Python字典巢狀

1 import copy 2 menu 10 程式設計 11,17 伺服器程式設計 18,23 24 網頁設計 31 後端 32353637 38 3940 41 menu copy copy.deepcopy menu 424344 print menu copy.pop 電腦科學與技術 字典巢...

Python字典的巢狀操作

在機器學習中會用字典的巢狀來儲存決策樹的資訊,對繪製樹形圖有很大的作用,其中巢狀字典的生成是乙個遞迴的過程 如下所示 s b 構造字典 s a 0 取值 no s a 1 s a 1 flippers 1 maybe 巢狀構造過程 s s no sur 0 no s ss ss fli 0 no s...

python 有序字典與巢狀字典

1.ordereddict 有序字典 ordereddict是dict的子類,它記住了內容新增的順序。而普通字典是無序的。普通字典 import collections d dict d a a d b b d c c for k,v in d.items print k,v a ac c b b有...