在Python上修改dict

在Python上修改dict,python,dictionary,Python,Dictionary,以下是数据格式: original_data = [{'year':2015, 'missing_number':25, 'station':3}, {'year':2015, 'missing_number':15, 'station':6}, {'year':2013,'missing_number':28, 'station':9}, {'year':2013,'missing_number':65, 'station':10} ] 我希望我的原始数据如下所示: new_data = {

以下是数据格式:

original_data = [{'year':2015, 'missing_number':25, 'station':3}, {'year':2015, 'missing_number':15, 'station':6}, {'year':2013,'missing_number':28, 'station':9}, {'year':2013,'missing_number':65, 'station':10} ]
我希望我的原始数据如下所示:

new_data = {'2015': {3:25,6:15}, '2013': {9:28, 10:65}}

您介意帮我吗?

使用循环,将项目添加到嵌套字典:

new_data = {}
for d in original_data:
    new_data.setdefault(d['year'], {})[d['station']] = d['missing_number']
dict.setdefault()
如果键(第一个参数)尚未出现,则添加第二个参数作为默认值,然后返回键的值。这使您可以构建按
d['year']
值分组的嵌套字典

演示:

您还可以使用为每个键创建新的嵌套字典:

from collections import defaultdict

new_data = defaultdict(dict)
for d in original_data:
    new_data[d['year']][d['station']] = d['missing_number']
defaultdict
dict
的子类;您可以通过将
defaultdict.default\u factory
设置为
None
来“重置”自动值创建行为,之后它将再次像常规字典一样工作:

>>> from collections import defaultdict
>>> new_data = defaultdict(dict)
>>> for d in original_data:
...     new_data[d['year']][d['station']] = d['missing_number']
... 
>>> new_data
defaultdict(<type 'dict'>, {2013: {9: 28, 10: 65}, 2015: {3: 25, 6: 15}})
>>> new_data.default_factory = None
>>> new_data[2020]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 2020
>>从集合导入defaultdict
>>>新数据=默认dict(dict)
>>>对于原始_数据中的d:
...     新的_数据[d['year'][d['station']]=d['missing_number']
... 
>>>新数据
defaultdict(,{2013:{9:28,10:65},2015:{3:25,6:15})
>>>新建\u data.default\u工厂=无
>>>新数据[2020]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
关键错误:2020年
>>> from collections import defaultdict
>>> new_data = defaultdict(dict)
>>> for d in original_data:
...     new_data[d['year']][d['station']] = d['missing_number']
... 
>>> new_data
defaultdict(<type 'dict'>, {2013: {9: 28, 10: 65}, 2015: {3: 25, 6: 15}})
>>> new_data.default_factory = None
>>> new_data[2020]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 2020