有没有一种方法可以使用字典的索引位置(如果有的话)从字典中删除键,而不是使用实际的键(避免del d['key']使用例如,而是使用索引位置)从字典中删除键?
如果有的话,也不必理会这个问题的其余部分,因为这也是我在寻找的内容。
因此,作为我的例子,我有字典d,它使用列表作为值:
d = {'acd': ['cad'], 'abd': ['bad', 'dab']}
Run Code Online (Sandbox Code Playgroud)
我想从这样的字典中完全删除每个键,这些字典的值的项目长度小于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
Run Code Online (Sandbox Code Playgroud)
我使用index_pos是因为我认为它可能有用,但不确定。
我知道我可以使用以下方法从字典中删除一个条目
del d['key']
Run Code Online (Sandbox Code Playgroud)
但是,如何避免使用键,例如改用索引位置,或者如何找出键,以便将其删除?
只需使用字典理解即可:
d = {'acd': ['cad'], 'abd': ['bad', 'dab']}
res = {k: v for k, v in d.items() if len(v) >= 2}
Run Code Online (Sandbox Code Playgroud)
是的,您正在创建一个新的字典,但这本身通常不是问题。任何解决方案都需要O(n)时间。
您可以在修改原始字典的同时迭代字典的副本。但是,您应该发现字典理解效率更高。在任何情况下,迭代原始字典时都不要删除或添加键。