我打算通过namedtuple
构建一个嵌套数据结构,如下所示
from collections import namedtuple
BinaryDay = namedtuple('BinaryDay', ['AM', 'PM'])
QuaternaryDday = namedtuple('QuaternaryDday', ['Moring','Afternoon','Evening','Night'])
OctonaryDay = namedtuple('OctonaryDay', ['Sunrise', 'Sunshine', 'Hotnoon','Sunset', 'Goldenevening', 'Warmevening', 'Darknight', 'Refreshmorning'])
clock_day = OctonaryDay('07:00-10:00', '10:00-13:00', '13:00-16:00', '16:00-19:00', '19:00-22:00', '22:00-01:00','01:00-04:00', '04:00-07:00')
在控制台中运行以获得这样的输出:
In [71]: clock_day._asdict()
Out[71]:
OrderedDict([('Sunrise', '07:00-10:00'),
('Sunshine', '10:00-13:00'),
('Hotnoon', '13:00-16:00'),
('Sunset', '16:00-19:00'),
('Goldenevening', '19:00-22:00'),
('Warmevening', '22:00-01:00'),
('Darknight', '01:00-04:00'),
('Refreshmorning', '04:00-07:00')])
我想要的结果是这样的数据结构。
{'AM': {'Moring': {'Sunrise': '07:00-10:00',
'Sunshine': '10:00-13:00'}
'Afternoon': {'Hotnoon': '13:00-16:00',
'Sunset': '16:00-19:00'},
},
'PM': {'Evening': {'Goldenevening': '19:00-22:00',
'Warmevening': '22:00-01:00'},
'Night': {'Darknight': '01:00-04:00',
'Refreshmorning': '04:00-07:00'}}}
如何通过多重继承实现它?
答案 0 :(得分:0)
这对namedtuple
来说并不是一个很好的用例,也不是多重继承。
虽然有一个可能对你有用的库,所以pip install python-box
然后是:
>>> data = {'AM': {'Moring': {'Sunrise': '07:00-10:00',
... 'Sunshine': '10:00-13:00'},
... 'Afternoon': {'Hotnoon': '13:00-16:00',
... 'Sunset': '16:00-19:00'},
... },
... 'PM': {'Evening': {'Goldenevening': '19:00-22:00',
... 'Warmevening': '22:00-01:00'},
... 'Night': {'Darknight': '01:00-04:00',
... 'Refreshmorning': '04:00-07:00'}}}
...
>>> from box import Box
>>> clock_day = Box(data)
>>> clock_day.AM.Afternoon
<Box: {'Hotnoon': '13:00-16:00', 'Sunset': '16:00-19:00'}>
>>> clock_day.AM.Afternoon.Sunset
'16:00-19:00'