Fyn*_*ney 5 python dictionary list
我的问题可能有点难以理解,但实际上就是这样。我有一个看起来像这样的嵌套字典:
dict_a = {'one': {'bird':2, 'tree':6, 'sky':1, 'TOTAL':9},
'two': {'apple':3, 'sky':1, 'TOTAL':4},
'three': {'tree':6, 'TOTAL':6},
'four': {'nada':1, 'TOTAL':1},
'five': {'orange':2, 'bird':3, 'TOTAL':5}
}
Run Code Online (Sandbox Code Playgroud)
和一个列表:
list1 = ['bird','tree']
newlist = []
Run Code Online (Sandbox Code Playgroud)
如何检查 list1 中的项目是否在 dict_a 的嵌套字典中并将其附加到 newlist 中?输出应如下所示:
newlist = ['one','three','five']
Run Code Online (Sandbox Code Playgroud)
因为鸟和树碰巧在一、三和五的嵌套字典中。
我能想到的是:
for s,v in dict_a.items():
for s1,v1 in v.items():
for item in list1:
if item == s1:
newlist.append(s)
Run Code Online (Sandbox Code Playgroud)
创建list1
一个集合并使用字典视图和列表理解:
set1 = set(list1)
newlist = [key for key, value in dict_a.iteritems() if value.viewkeys() & set1]
Run Code Online (Sandbox Code Playgroud)
在 Python 3 中,使用value.keys()
anddict_a.items
代替。
这测试字典键和您正在查找的键集之间是否存在集合交集(高效操作)。
演示:
>>> dict_a = {'one': {'bird':2, 'tree':6, 'sky':1, 'TOTAL':9},
... 'two': {'apple':3, 'sky':1, 'TOTAL':4},
... 'three': {'tree':6, 'TOTAL':6},
... 'four': {'nada':1, 'TOTAL':1},
... 'five': {'orange':2, 'bird':3, 'TOTAL':5}
... }
>>> set1 = {'bird','tree'}
>>> [key for key, value in dict_a.iteritems() if value.viewkeys() & set1]
['three', 'five', 'one']
Run Code Online (Sandbox Code Playgroud)
请注意,字典顺序是任意的(取决于所使用的键以及字典插入和删除历史记录),因此输出列表顺序可能不同。
从技术上讲,您也可以直接使用您的列表(value.viewkeys() & list1
有效),但将其设为一组可以更清楚地表达您的意图。