[英]Python Split a dict into a list of dicts
當我在后端收到request.POST
時,我會為每個表單創建一個字典。
目前我已經設法通過request.POST.dict()
() 將 request.POST (QueryDict) 傳遞給 dict,正如我在一些 StackOverflow 問題中看到的那樣,但是我仍然必須將此字典轉換為字典列表,但我沒有知識。
字典中的每個表單都關聯了字符串:form-number,我想為每個表單創建一個字典。
當前字典(簡化示例):
{'form-0-a': 'MIE0158', 'form-0-b': 'ABHD12', 'form-0-jief': 'JUGI&', 'form-1-a': 'MIE0158', 'form-1-b': 'ABHD12', 'form-1-jief': 'JUGI&', 'form-2-a': 'MIE0158', 'form-2-b': 'ABHD12', 'form-2-jief': 'JUGI&'}
所需的字典列表:
[{'form-0-a': 'MIE0158', 'form-0-b': 'ABHD12', 'form-0-jief': 'JUGI&'}, {'form-1-a': 'MIE0158', 'form-1-b': 'ABHD12', 'form-1-jief': 'JUGI&'}, {'form-2-a': 'MIE0158', 'form-2-b': 'ABHD12', 'form-2-jief': 'JUGI&'}]
我不熟悉 Python 所以我想知道最pythonic的方法是什么?
您可以像這樣創建字典。
dict_1= {'form-0-a': 'MIE0158', 'form-0-b': 'ABHD12', 'form-0-jief': 'JUGI&', 'form-1-a': 'MIE0158', 'form-1-b': 'ABHD12', 'form-1-jief': 'JUGI&', 'form-2-a': 'MIE0158', 'form-2-b': 'ABHD12', 'form-2-jief': 'JUGI&'}
res = {}
for key, value in dict_1.items():
key_ = key.rsplit('-', 1)[0]
res.setdefault(key_, {}).update({key:value})
print(list(res.values()))
Output
[{'form-0-a': 'MIE0158', 'form-0-b': 'ABHD12', 'form-0-jief': 'JUGI&'}, {'form-1-a': 'MIE0158', 'form-1-b': 'ABHD12', 'form-1-jief': 'JUGI&'}, {'form-2-a': 'MIE0158', 'form-2-b': 'ABHD12', 'form-2-jief': 'JUGI&'}]
def test_function():
test = {'form-0-a': 'MIE0158', 'form-0-b': 'ABHD12', 'form-0-jief': 'JUGI&', 'form-1-a': 'MIE0158', 'form-1-b': 'ABHD12',
'form-1-jief': 'JUGI&', 'form-2-a': 'MIE0158', 'form-2-b': 'ABHD12', 'form-2-jief': 'JUGI&'}
form_num = 0
new_dict = {}
new_list = []
for num, item in enumerate(test):
if int(item[5]) == form_num:
new_dict[item] = test[item]
else:
form_num = int(item[5])
new_list.append(new_dict.copy())
new_dict = {}
new_list.append(new_dict.copy())
print(new_list)
if __name__ == '__main__':
test_function()
output
[{'form-0-a': 'MIE0158', 'form-0-b': 'ABHD12', 'form-0-jief': 'JUGI&'}, {'form-1-a': 'MIE0158', 'form-1-b': 'ABHD12', 'form-1-jief': 'JUGI&'}, {'form-2-a': 'MIE0158', 'form-2-b': 'ABHD12', 'form-2-jief': 'JUGI&'}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.