在我的表单发布请求中我抓取所有表单信息,但似乎有一些空键和值。我想删除所有空键和值的实例。这就是我到目前为止所做的,而且显然不起作用。
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', ...
如果删除密钥,它会删除其各自的值吗?如何摆脱空键和值?
答案 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'}