如何移除Python字典中所有列表值的第X个元素?
问题描述
我有如下形式的Python字典:
dict_one = { 'key1': ['val1', 'val2', 'val3'], 'key2': ['val1', 'val2', 'val3'] }
我想要移除字典中每个列表里的'val3',尝试用for循环实现但代码报错。我试过的代码如下:
for lst in dict_one: dict_one.pop(dict_one[lst][2])
这段代码返回了KeyError错误,我知道dict_one.remove()不能用(因为这是列表的方法),但好像没找对正确的操作方式。
(补充说明:若只想删除部分'val3'元素,可参考对应过滤逻辑)
解决方法
你出错的核心是搞混了字典和列表的操作:
dict.pop()是用来删字典键值对的,参数得是字典的键,你传的是列表里的val3,字典里没这个键,自然报KeyError。- 要改的是字典值里的列表,得直接操作这些列表本身。
情况1:每个列表里只有一个'val3'
直接遍历字典的所有列表值,用列表的remove()方法删元素:
for lst in dict_one.values(): lst.remove('val3')
dict.values()会直接拿到字典里的所有列表,遍历的时候修改原列表,改动会直接同步到原字典。
情况2:列表里可能有多个'val3'
用列表推导式过滤掉所有'val3',生成新列表替换原字典里的旧列表:
for key in dict_one: dict_one[key] = [item for item in dict_one[key] if item != 'val3']
不管'val3'出现几次,都会被全部过滤掉。
情况3:'val3'固定在列表第3位(索引为2)
如果'val3'总是列表的第三个元素,用list.pop(index)按索引删除,记得先判断列表长度避免报错:
for lst in dict_one.values(): if len(lst) >= 3: lst.pop(2)
内容的提问来源于stack exchange,提问作者Adam Gold
相关产品推荐
相关产品推荐

