Gia*_*ear 8 python dictionary list
我有一本字典:
default = {'a': ['alpha'], 'b': ['beta','gamma'], 'g': []}
Run Code Online (Sandbox Code Playgroud)
我希望消除空值:
default = {'a': ['alpha'], 'b': ['beta','gamma']}
Run Code Online (Sandbox Code Playgroud)
我写了一个函数(按照网络上的一个例子)
def remove_empty_keys(d):
for k in d.keys():
try:
if len(d[k]) < 1:
del[k]
except:
pass
return(d)
Run Code Online (Sandbox Code Playgroud)
我有以下问题:
1-我没有找到错误,为什么它总是返回以下 -
remove_empty_keys(default)
{'a': ['alpha'], 'b': ['beta'], 'g': []}
Run Code Online (Sandbox Code Playgroud)
2-是否有内置函数从Python字典中删除/删除Null/None/empty值而不创建原始字典的副本?
没有内置功能(AFAIK),但你可以通过词典理解轻松完成:
new_dict = {k:v for k,v in original_dict.items() if v}
Run Code Online (Sandbox Code Playgroud)
如果您遇到旧版本的python(2.7之前没有dict理解),您可以使用dict构造函数:
new_dict = dict((k,v) for k,v in original_dict.items() if v)
Run Code Online (Sandbox Code Playgroud)
请注意,这不会就位(根据您的第二个问题).字典不像列表那样支持切片分配,所以最好的*你可以真正做到这一切就是:
new_dict = {k:v for k,v in original_dict.items() if v}
original_dict.clear()
original_dict.update(new_dict)
Run Code Online (Sandbox Code Playgroud)
*当然,"最佳"一词完全是主观的.
要修复您的功能,请更改del[k]
为del d[k]
.没有从字典中删除值的功能.
你正在做的是删除变量k
,而不是更改字典.这就是返回原始字典的原因.
重写,您的功能可能如下所示:
def remove_empty_keys(d):
for k in d.keys():
if not d[k]:
del d[k]
Run Code Online (Sandbox Code Playgroud)
这假设您要消除空列表和None
值,并实际删除任何带有"false"值的项目.
您可以使用dict理解:-
>>> default = {'a': ['alpha'], 'b': ['beta','gamma'], 'g': []}
>>> {key: value for key, value in default.iteritems() if value}
{'a': ['alpha'], 'b': ['beta', 'gamma']}
Run Code Online (Sandbox Code Playgroud)