如果值为空,如何删除dict键

时间:2016-06-03 21:56:25

标签: python

在我的表单发布请求中我抓取所有表单信息,但似乎有一些空键和值。我想删除所有空键和值的实例。这就是我到目前为止所做的,而且显然不起作用。

post_dict = dict(request.POST)
item_data = {}

for key, value in post_dict.items():
    if value is None:
        del post_dict[key]
    field = key.split('[')[1].replace(']', '')
    item_data[field] = ''.join(value)

print(item_data)

print item_data的内容如下:

{'': '', 'username': 'johndoe', 'email': 'johndoe@gmail.com', ... 

如果删除密钥,它会删除其各自的值吗?如何摆脱空键和值?

4 个答案:

答案 0 :(得分:2)

也许你可以使用以下方法之一做你想做的事:

dict_1 = {'': '', 'username': 'johndoe', 'email':'', }

dict_2 = dict(x for x in dict_1.iteritems() if any(x))
print dict_2  # {'username': 'johndoe', 'email': ''}

dict_3 = dict(x for x in dict_1.iteritems() if all(x))
print dict_3  # {'username': 'johndoe'}

答案 1 :(得分:2)

试试这个:

new_item_data={k:item_data[k] for k in item_data if item_data[k]}

任何没有值的键都将被删除。

答案 2 :(得分:1)

for key, value in post_dict.items():

在您的代码中,您正在post_dict上进行迭代。 但是,在行del post_dict[key]中,您正在修改迭代器,因此它将向for提供字典的不一致视图。添加或删除正在迭代的字典中的键是不好的。

这可能会给你想要的结果

post_dict = dict(request.POST)
item_data = {}

for key, value in post_dict.items():
    if value == "":
        continue
    if key == "":
        continue
    field = key.split('[')[1].replace(']', '')
    item_data[field] = ''.join(value)

print(item_data)

答案 3 :(得分:0)

试试这个,

post_dict = {'': '', 'item_data[username]': ['johndoe'], 'item_data[email]': ['johndoe@gmail.com'], 'item_data[campus]': ['madison']}
item_data = {}

for key, value in post_dict.items():
    strlist = key.split('[')
    if len(strlist) == 1:
        continue

    new_key = strlist[1].replace(']', '')
    new_value = ''.join(value)

    # add to the dict if both new_key and new_value are non-empty
    if all([new_key, new_value]):
        item_data[new_key] = new_value

print(item_data)
# Output
{'username': 'johndoe', 'campus': 'madison', 'email': 'johndoe@gmail.com'}

上一个答案:从密钥或值为空的字典中删除这些项目。

d = {'': '', 'username': 'johndoe', 'email': 'johndoe@gmail.com'}

for k, v in d.items():
    if not any([k, v]):
        del d[k]

print(d)
{'username': 'johndoe', 'email': 'johndoe@gmail.com'}