作者kimball (我在抗拒什麽...)
看板Python
标题Re: [问题] 巢状字典的问题
时间Thu Oct 6 03:14:37 2016
※ 引述《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://webptt.com/cn.aspx?n=bbs/Python/M.1475694879.A.6E6.html