【问题标题】:Remove key:value pair from dictionary based on a condition?根据条件从字典中删除键:值对?
【发布时间】:2019-03-25 19:31:52
【问题描述】:

我有嵌套字典'my_dict',如下所示。我想从按主键名称格式分组的嵌套字典中删除常用键。

my_dict = {'abc_1': {'00000000': 0.01555745891946835,
                  'facility': 0.04667237675840505,
                  'among': 0.01555745891946835},
        'abc_2': {'00000000': 0.01555745891946835,
                  'before': 0.04667237675840505,
                  'last': 0.01555745891946835},
         'mno_1': {'hello': 0.01555745891946835,
                  'hola': 0.04667237675840505,
                  '0000150000': 0.01555745891946835},
          'mno_2': {'hello': 0.01555745891946835,
                  'name': 0.04667237675840505,
                  '0000150000': 0.01555745891946835},
           'oko_1': {'err': 0.01555745891946835,
                  'error': 0.04667237675840505,
                  '7812': 0.01555745891946835},
            'oko_2': {'9872': 0.01555745891946835,
                  'error': 0.04667237675840505,
                  '00': 0.01555745891946835}}

例如,嵌套字典中以 abc* 开头的键的常用键是 00000000。所以,我想删除这个键。同样,我想为所有人做。 预期结果如下:

预期结果:

result_dict = {'abc_1': {'facility': 0.04667237675840505,
                  'among': 0.01555745891946835},
        'abc_2': {'before': 0.04667237675840505,
                  'last': 0.01555745891946835},
         'mno_1': {'hola': 0.04667237675840505},
          'mno_2': {'name': 0.04667237675840505},
           'oko_1': {'err': 0.01555745891946835,
                  '7812': 0.01555745891946835},
            'oko_2': {'9872': 0.01555745891946835,
                  '00': 0.01555745891946835}}

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 是公用键本身,还是只有公用键共享一个值?
  • 仅当公共键共享一个值时。然后删除嵌套字典中的特定键:值par。

标签: python python-3.x dictionary


【解决方案1】:

首先,获取所有密钥,然后筛选您希望保留的密钥。然后,您可以仅使用要保留的键来重建新的字典:

all_keys = [n for k in my_dict.values() for n in k.keys()]
keys_to_keep = {k for k in all_keys if all_keys.count(k) == 1}
result_dict = {k: {kk: v[kk] for kk in keys_to_keep if kk in v} for k, v in my_dict.items()}

结果:

{'abc_1': {'facility': 0.04667237675840505, 'among': 0.01555745891946835}, 'abc_2': {'before': 0.04667237675840505, 'last': 0.01555745891946835}, 'mno_1': {'hola': 0.04667237675840505}, 'mno_2': {'name': 0.04667237675840505}, 'oko_1': {'err': 0.01555745891946835, '7812': 0.01555745891946835}, 'oko_2': {'9872': 0.01555745891946835, '00': 0.01555745891946835}}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 2013-02-16
  • 2022-01-20
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多