如果项目的长度小于或等于1,则从字典中删除项目

时间:2018-11-24 23:11:21

标签: python dictionary

快速问题:我是否可以使用它的索引位置(如果有)从字典中删除键,而不是使用实际键(避免使用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']

但是如何避免使用密钥,例如而是使用索引位置,或者如何找出键,以便删除它?

希望我并没有太困惑。

谢谢

2 个答案:

答案 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)