gpt4 book ai didi

python - 从嵌套字典中删除元组键;避免运行时和类型错误

转载 作者:行者123 更新时间:2023-11-30 22:09:50 25 4
gpt4 key购买 nike

我从最初来自 .xlsx 工作表的 pandas 数据帧生成了一个大型嵌套字典。通过这个过程,我的 Excel 工作表中的一些空单元格被导入为“nan”,并且值存储在元组中,这些元组充当键。生成的字典看起来像这样:

d_nans = {'feature1': {('1', '2'): [{'item1':'value1', 'item2': 'value2'}], 
('nan', 'nan'): [{'item3':'value3', 'item4': 'value4'}]},
'feature2': {('3', '10'): [{'item5':'value5', 'item6': 'value6'}],
('nan', 'nan'): [{'item7':'value7', 'item8': 'value8'}],
('23', '40'): [{'item9':'value9', 'item10': 'value10'}]},
'feature3': {('21', '5000'): [{'item51':'value51', 'item61': 'value61'}],
('nan', 'nan'): [{'item71':'value71', 'item81': 'value81'}],
('560', '2400'): [{'item19':'value19', 'item110': 'value110'}]}}

我需要一种方法来编辑字典以删除键具有值('nan','nan')的所有键:值对。我试过这个:

for key, value in d_nans.items():
seq_id = key
feature_type = value
for key, value in feature_type.items():
if type(key) == tuple:
if key[0] == 'nan':
del feature_type[key]

运行时错误:“字典在迭代过程中更改了大小”

我尝试使用 How to solve dictionary changed size during iteration in Python 中的一些代码来解决这个问题

for key, value in d_nans.items():
seq_id = key
feature_type = value
for key, value in feature_type.items():
for sub_key in list(feature_type.keys()):
if sub_key[0] == 'nan':
del dict[sub_key]

但这给了我

TypeError: 'type' object does not support item deletion

如有任何建议,我们将不胜感激!

最佳答案

您可以使用dict.pop删除特定的键(如果存在)。如果 key 不存在,请指定一个默认值以避免 KeyError。由于您有嵌套字典,因此可以使用 for 循环。

for v in d_nans.values():
v.pop(('nan', 'nan'), None)

在迭代字典时修改字典通常不是一个好主意,但在这里你可以这样做,因为你没有在父 d_nans 字典中删除/添加键。

现在让我们看看您的两次尝试:

  1. 您的第一次尝试失败了,因为您的字典大小会随着迭代而变化。 docs 中明确解释了这一点:

Iterating views while adding or deleting entries in the dictionary may raise a RuntimeError or fail to iterate over all entries.

  • dict 是一个类,而不是一个实例。因此,您不能使用del dict[key]。无论如何,根据您的第一次尝试,这不是一个好主意,而且仍然会失败。
  • 关于python - 从嵌套字典中删除元组键;避免运行时和类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51814886/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com