快速问题:我是否可以使用它的索引位置(如果有)从字典中删除键,而不是使用实际键(避免使用del d ['key']但使用索引位置)代替)?
如果有的话,也不必再读这个问题的其余部分,因为这也是我在寻找的东西。
因此,以我的情况为例,我有字典d,它使用值的列表:
d = {'acd': ['cad'], 'abd': ['bad', 'dab']}
我想从这样的字典中完全删除每个键,这些字典的值的项目长度小于2(因此,如果只有1个项目)。
因此,在此示例中,我想删除键“ acd”,因为它的值列表仅包含1个项“'cad']。 'abd'有2个项目['bad','dab'],所以我不想删除它-仅当它包含1个或更少的项目时。这本字典只是一个例子-我正在使用比这更大的版本,并且我需要它来删除所有单个项目值键。
我为测试编写了此代码,但不确定如何删除我想要的密钥-或确定它们是什么。
d = {'acd': ['cad'], 'abd': ['bad', 'dab']}
index_pos = 0
for i in d.values():
#Testing and seeing stuff
print("pos:", index_pos)
print(i)
print(len(i))
if len(i) < 2:
del d[???]
#What do I do?
index_pos += 1
我使用index_pos是因为我认为它可能有用,但不确定。
我知道我可以使用
从字典中删除一个条目del d['key']
但是如何避免使用密钥,例如而是使用索引位置,或者如何找出键,以便删除它?
希望我并没有太困惑。
谢谢
答案 0 :(得分:4)
只需使用字典理解即可:
d = {'acd': ['cad'], 'abd': ['bad', 'dab']}
res = {k: v for k, v in d.items() if len(v) >= 2}
是的,您正在创建一个新字典,但这本身通常不是问题。任何解决方案都需要O( n )时间。
您可以在修改原始字典的同时迭代字典的副本。但是,您应该发现字典理解效率更高。在任何情况下,迭代原始字典时都不要删除或添加密钥。
答案 1 :(得分:1)
如果您不想创建新字典,可以通过以下方法更改代码。在这里,我们遍历字典的副本,如果其长度小于2,则删除原始字典的键。
d = {'acd': ['cad'], 'abd': ['bad', 'dab']}
for key in d.copy():
if len(d[key]) < 2:
del d[key]
print(d)