首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据python中的条件从字典中的列表中删除元素

如何根据python中的条件从字典中的列表中删除元素
EN

Stack Overflow用户
提问于 2019-07-09 15:48:30
回答 4查看 1.4K关注 0票数 0

我有一个字典,其中键是字符串,值是字符串列表。下面是我正在处理的一本大得多的字典中的一个例子。我遇到的一个问题是,键有时会出现在值中。键'25-3‘包含'25-3’,我想删除它。

代码语言:javascript
运行
复制
cat_map = {'11-1': ['41-4', '43-1', '11-2', '43-6'],
 '11-2': ['41-4', '43-1', '11-2', '43-6'],
 '11-3': [],
 '11-9': [],
 '13-1': [],
 '13-2': [],
 '15-1': [],
 '15-2': [],
 '17-1': [],
 '17-2': [],
 '17-3': [],
 '19-1': [],
 '19-2': [],
 '19-3': [],
 '19-4': [],
 '21-1': [],
 '21-2': ['43-2', '33-9', '39-6', '39-9', '25-3', '39-3', '39-7'],
 '23-1': [],
 '23-2': [],
 '25-1': [],
 '25-2': [],
 '25-3': ['43-2', '37-1', '39-6', '25-3', '39-3'],

我不明白为什么下面这些东西不起作用

代码语言:javascript
运行
复制
for k,v in cat_map.items():
    for item in v:
        if k == item:
            del cat_map[cat_map[k].index(item)]
        else:
            continue

参见错误(KeyError2)

代码语言:javascript
运行
复制
KeyError                                  Traceback (most recent call last)
<ipython-input-83-f4c2c0fde28b> in <module>
      2     for item in v:
      3         if k== item:
----> 4             del cat_map[cat_map[k].index(item)]
      5         else:
      6             continue

KeyError: 2
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-07-09 15:51:54

您没有正确地访问列表。你会想做:

代码语言:javascript
运行
复制
del cat_map[k][cat_map[k].index(item)]

但是,您可以通过以下方法简化此检查:

代码语言:javascript
运行
复制
for k,v in cat_map.items():
    if k in v:
        v.remove(k)
票数 4
EN

Stack Overflow用户

发布于 2019-07-09 15:52:27

您可以使用字典理解来建立您想要保存的字典:

代码语言:javascript
运行
复制
cat_map = {k:v for k,v in cat_map.items() if not k in v}

如果希望保留该条目,但只需更改值,则可以使用(如Tomerikoo在注释中所观察到的):

代码语言:javascript
运行
复制
cat_map = {k:[x for x in v if x != k] for k,v in cat_map.items()}
票数 1
EN

Stack Overflow用户

发布于 2019-07-09 15:51:41

问题

  • 使用del cat_map[cat_map[k].index(item)]cat_map[k].index(item)将返回项的索引,该索引是cat_map字典中不可用的整数。因此,KeyError.

使用list remove,,但只需在此之前进行成员检查。

下面是代码:

代码语言:javascript
运行
复制
for k, v in cat_map.items():
    if k in v:
        v.remove(k)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56956337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档