【问题标题】:Filter nested dictionary in Python在 Python 中过滤嵌套字典
【发布时间】:2021-09-19 00:06:13
【问题描述】:

我正在尝试根据双嵌套字典中的值的值从嵌套字典中的嵌套字典中删除键:值对。

字典看起来像这样,我想过滤掉 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'}}}

我找到了通往this thread 的方法,这有点相似,尽管那里只有一层“嵌套”。

从中,我了解到如果我的字典只嵌套了一轮,我可以做这样的事情来过滤与它们相关的值太低的键:

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

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

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    你可以使用嵌套的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'}}}
    

    【讨论】:

    • 感谢您的明确回答,这真的帮助了我!
    猜你喜欢
    • 2021-11-21
    • 1970-01-01
    • 2012-05-14
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2019-12-14
    相关资源
    最近更新 更多