我有一个字典,其中键是字符串,值是字符串列表。下面是我正在处理的一本大得多的字典中的一个例子。我遇到的一个问题是,键有时会出现在值中。键'25-3‘包含'25-3’,我想删除它。
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'],
我不明白为什么下面这些东西不起作用
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)
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
发布于 2019-07-09 15:51:54
您没有正确地访问列表。你会想做:
del cat_map[k][cat_map[k].index(item)]
但是,您可以通过以下方法简化此检查:
for k,v in cat_map.items():
if k in v:
v.remove(k)
发布于 2019-07-09 15:52:27
您可以使用字典理解来建立您想要保存的字典:
cat_map = {k:v for k,v in cat_map.items() if not k in v}
如果希望保留该条目,但只需更改值,则可以使用(如Tomerikoo在注释中所观察到的):
cat_map = {k:[x for x in v if x != k] for k,v in cat_map.items()}
发布于 2019-07-09 15:51:41
问题
del cat_map[cat_map[k].index(item)]
,cat_map[k].index(item)
将返回项的索引,该索引是cat_map
字典中不可用的整数。因此,KeyError
.使用list remove
,,但只需在此之前进行成员检查。
下面是代码:
for k, v in cat_map.items():
if k in v:
v.remove(k)
https://stackoverflow.com/questions/56956337
复制相似问题