Re: [問題] 巢狀字典的問題

看板Python作者 (我在抗拒什麼...)時間8年前 (2016/10/05 19:14), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《vanilla1474 (wawa)》之銘言: : 大家好,我是Python 超級新手,最近自學遇到dict問題,卡關好多天了,麻煩大家教教 : 我了。 : A = { 'fruits': { 'apple': 10, 'bananas': 30, 'orange': 22 }, 'meat': { 'beef' : : 50, 'pork': 45, 'chicken':30 } } : 當我輸入30時,如何得到對應的key: bananas & chicken 的答案?反過來,如果是知道A : pple 怎麼得到它的value呢? : 我只會從最外面一層一層進去查 : 例:A['meat']['beef'] = 50 : 一直想不出可以用什麼方法找出內層字典的 key & value 啊...... : 感激不盡了! 以你要的功能來看,資料其實不要存成巢狀字典比較好 以下假設你不須要外面那層字典的 key 的資訊 (也就是 fruits 和 meat) 簡單的 solution 是把巢狀字典攤平 我這邊將資料結構轉換成內層字典的 key-value pair list b=[y for x in A.values() for y in x.iteritems()] 這樣 b 就會變成 [('pork', 45), ('chicken', 30), ('beef', 50), ('orange', 22), ('apple', 10), ('bananas', 30)] 如此一來,你要的功能 1. 30 的 item --> [k for k,v in b if v==30] 2. apple 的 value --> [v for k,v in b if k=='apple'] ------- 一些 dict 的內建方法這裡略過(dict.values(), dict.iteritems()) 另外這個 solution 大量使用 list comprehension (就是在把一些感覺像 expression 的 東西寫在 [] 裡面的語法) 建議花點力氣去弄懂。會 list comprehension 的話,語法寫起來會簡潔很多。 雖然濫用會有可讀性問題就是了XD 譬如說上面那行攤平字典的語法,用常規寫法寫起來會變成 b=[] for x in A.values(): for y in x.iteritems(): b.append(y) 是也沒多複雜啦,不過能寫成一行也不錯阿 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.36.230.84 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1475694879.A.6E6.html
文章代碼(AID): #1NzL4VRc (Python)
討論串 (同標題文章)
文章代碼(AID): #1NzL4VRc (Python)