本文介绍了重新整理字典的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个使用csv.dictwriter读入python的.csv文件,看起来像这样:
I have a .csv file that I've read into python using csv.dictwriter that looks something like this:
[
{'id':'1', 'date':'12312004','var1':'234', 'var2':'456'},
{'id':'1', 'date':'12312005','var1':'200', 'var2':'466'},
{'id':'1', 'date':'12312006','var1':'760', 'var2':'656'},
{'id':'1', 'date':'12312007','var1':'215', 'var2':'256'},
{'id':'2', 'date':'5312006','var1':'234', 'var2':'456'},
{'id':'2', 'date':'5312007','var1':'200', 'var2':'466'},
{'id':'2', 'date':'5312008','var1':'760', 'var2':'656'},
{'id':'2', 'date':'5312009','var1':'215', 'var2':'256'},
]
我想将其重组为:
{'1': {
'12312004': {'var1': '234', 'var2': '456'},
'12312005': {'var1': '200', 'var2': '466'},
'12312006': {'var1': '760', 'var2': '656'},
'12312007': {'var1': '215', 'var2': '256'}},
'2': {
'5312006': {'var1': '234', 'var2': '456'},
'5312007': {'var1': '200', 'var2': '466'},
'5312008': {'var1': '760', 'var2': '656'},
'5312009': {'var1': '215', 'var2': '256'}}
}
推荐答案
提供的输入内容是列表,您可以执行以下操作:
Provided your input is a list, you can do this:
output = {}
for entry in input_list:
entry = entry.copy() # so we can mangle it
id = entry.pop('id')
date = entry.pop('date')
output.setdefault(id, {})[date] = entry
dict.setdefault()
调用返回键id
的值,但是如果没有这样的键,则第二个参数将添加到该键的output
词典中,并返回.
The dict.setdefault()
call returns the value for the key id
, but if there is no such key, the second argument will be added to the output
dictionary for that key and returned instead.
演示:
>>> input_list = [
... {'id':'1', 'date':'12312004','var1':'234', 'var2':'456'},
... {'id':'1', 'date':'12312005','var1':'200', 'var2':'466'},
... {'id':'1', 'date':'12312006','var1':'760', 'var2':'656'},
... {'id':'1', 'date':'12312007','var1':'215', 'var2':'256'},
... {'id':'2', 'date':'5312006','var1':'234', 'var2':'456'},
... {'id':'2', 'date':'5312007','var1':'200', 'var2':'466'},
... {'id':'2', 'date':'5312008','var1':'760', 'var2':'656'},
... {'id':'2', 'date':'5312009','var1':'215', 'var2':'256'},
... ]
>>> output = {}
>>> for entry in input_list:
... entry = entry.copy() # so we can alter it
... id = entry.pop('id')
... date = entry.pop('date')
... output.setdefault(id, {})[date] = entry
...
>>> from pprint import pprint
>>> pprint(output)
{'1': {'12312004': {'var1': '234', 'var2': '456'},
'12312005': {'var1': '200', 'var2': '466'},
'12312006': {'var1': '760', 'var2': '656'},
'12312007': {'var1': '215', 'var2': '256'}},
'2': {'5312006': {'var1': '234', 'var2': '456'},
'5312007': {'var1': '200', 'var2': '466'},
'5312008': {'var1': '760', 'var2': '656'},
'5312009': {'var1': '215', 'var2': '256'}}}
这篇关于重新整理字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!