python中的过滤器嵌套字典

mrfwxfqh  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(521)

我试图根据双嵌套dict中的值,从嵌套字典中的嵌套字典中删除key:value对。
字典看起来是这样的,我想过滤掉年龄在25岁以下的人的全部条目(而我不想过滤掉最外层的字典,所以是“人组”字典)。


# Make a nested dictionary for test

people = {0:{1:{'name': 'John', 'age': '27', 'gender': 'Male'},
          2: {'name': 'Marie', 'age': '22', 'gender': 'Female'},
          3: {'name': 'Nicola', 'age': '19', 'gender': 'Non-binary'},
          4: {'name': 'Garfield', 'age': '32', 'gender': 'Male'}},
         1:{1:{'name': 'Katie', 'age': '24', 'gender': 'Male'},
          2: {'name': 'Marigold', 'age': '42', 'gender': 'Female'},
          3: {'name': 'James', 'age': '10', 'gender': 'Non-binary'},
          4: {'name': 'Precious', 'age': '35', 'gender': 'Male'}}}

我已经找到了通往这条线的路,这有点类似,尽管那里只有一层“嵌套”。
从中,我了解到,如果我的字典只嵌套了一轮,我可以这样做来过滤与它们关联的值太低的键:

{i:j for i,j in people.items() if j.get('age',0) >='25'}

如何在这样的双嵌套字典中访问元素,然后删除整个“单嵌套字典”,但保留最外层的字典?

e0uiprwp

e0uiprwp1#

您可以使用嵌套的dict理解:

>>> {gid: {uid: user for uid, user in pg.items() if int(user.get('age', 0)) >= 25} for gid, pg in people.items()}
{0: {1: {'name': 'John', 'age': '27', 'gender': 'Male'},
  4: {'name': 'Garfield', 'age': '32', 'gender': 'Male'}},
 1: {2: {'name': 'Marigold', 'age': '42', 'gender': 'Female'},
  4: {'name': 'Precious', 'age': '35', 'gender': 'Male'}}}

相关问题