python - 过滤字典的字典

标签 python dictionary filter

我是 Python 新手,我不确定使用 dict of dict 是个好主意,但这是我的问题。 我有一本字典的字典,我想按内部字典的键进行过滤:

a = { 'key1' : {'id1' :[0,1,2] , 'id2' :[0,1,2], 'id3' :[4,5,6]},
     'key2' : {'id3' :[0,1,2] , 'id4' :[0,1,2]},
     'key3' : {'id3' :[0,1,2] , 'id1' :[4,5,6]}
   }

例如,我想按“id1”过滤:

result = { 'key1' : {'id1' :[0,1,2] },
           'key3' : {'id1' :[4,5,6]}
         }

我尝试了过滤方法,得到了所有的值:

r = [('key1' ,{'id1' :[0,1,2] , 'id2' :[0,1,2], 'id3' :[4,5,6]}),
     ('key3' , {'id3' :[0,1,2] , 'id1' :[4,5,6]})
   ]

此外,过滤器方法返回一个列表,我想将格式保留为字典。

提前致谢

最佳答案

试试这个:

>>> { k: v['id1'] for k,v in a.items() if 'id1' in v }
{'key3': [4, 5, 6], 'key1': [0, 1, 2]}

对于 Python 2.x,您可能更喜欢使用 iteritems() 而不是 items(),并且您仍然需要一个相当新的 python(我认为是 2.7)对于字典理解:对于较老的 python 使用:

dict((k, v['id1']) for k,v in a.iteritems() if 'id1' in v )

如果你想提取多个值,那么我认为你最好完整地写出循环:

def query(data, wanted):
    result = {}
    for k, v in data.items():
        v2 = { k2:v[k2] for k2 in wanted if k2 in v }
        if v2:
            result[k] = v2
    return result

给予:

>>> query(a, ('id1', 'id2'))
{'key3': {'id1': [4, 5, 6]}, 'key1': {'id2': [0, 1, 2], 'id1': [0, 1, 2]}}

关于python - 过滤字典的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5992666/

相关文章:

python - 使用 Flask 在 Python 中进行长轮询

python - Python中的按键错误4

c++ - 使用模板作为 std::map 中的键

javascript - 需要表格来填充搜索栏的搜索结果

python - 从 virtualenv 启动 Sublime Text

java - 如何为包编写迭代器? (需要内部类)

filter - 有什么理由在投影上使用 css box-shadow 吗?

filter - 如何编写自己的捕获过滤器?

matlab - 7x7 Prewitt 内核

python - 如何在 Django ORM 中使用 PostGIS 聚合函数 ST_AsMVT