清理字典但保留密钥

时间:2015-10-28 11:31:18

标签: python

是否可以清除字典中的所有条目但保留所有密钥?

例如,如果我有:

1   kw4 10  en
2   kw2 20  en
10  kw3 50  en

我把一些东西放在其中:

my_dic={
        "colour":[],
        "number":[]
        }

我可以通过以下方式清除这些:

my_dic["colour"]='Red'
my_dic["number"]='2'

但是,如果我想快速清除一本大字典,那么这是一个长篇大论,是否有更快的方法可能用于?我想保留密钥my_dic["colour"] = [] my_dic["number"] = [] ,而不必重新创建密钥,只需清除其中的所有条目。

3 个答案:

答案 0 :(得分:8)

您可以简单地清除循环中的所有列表:

for value in my_dic.values():
    del value[:]

注意value[:]切片删除;我们正在删除列表中的所有索引,而不是value引用本身。

请注意,如果您使用的是Python 2,则可能需要使用my_dic.itervalues()而不是my_dic.values()来避免为循环创建新的列表对象。

演示:

>>> my_dic = {'colour': ['foo', 'bar'], 'number': [42, 81]}
>>> for value in my_dic.values():
...     del value[:]
...
>>> my_dic
{'colour': [], 'number': []}

您还可以使用新的空列表替换所有值:

my_dic.update((key, []) for key in my_dic)

或完全替换整个词典:

my_dic = {key: [] for key in my_dic}

考虑到这两种方法不会更新对列表(第一种方法)或整个字典(第二种方法)的其他引用。

答案 1 :(得分:3)

您无需从字典中删除密钥:

for key in my_dict:
    my_dict[key] = []

答案 2 :(得分:0)

一个班轮:

my_dict =  dict.fromkeys(my_dict, '')

请注意,这不适用于列表,因为每个条目都有相同的列表。