2013-07-09 79 views
1

我OPENING_HOURS鍵的值是一個字典的Python:訪問嵌套的數據結構

和periodsis我想提取列表中的值。

dic = {u'opening_hours': {u'open_now': True, u'periods': [{u'close': {u'day': 1, u'time': u'0100'}, u'open': {u'day': 0, u'time': u'0800'}}, {u'close': {u'day': 2, u'time': u'0100'}, u'open': {u'day': 1, u'time': u'0800'}}, {u'close': {u'day': 3, u'time': u'0100'}, u'open': {u'day': 2, u'time': u'0800'}}, {u'close': {u'day': 4, u'time': u'0100'}, u'open': {u'day': 3, u'time': u'0800'}}, {u'close': {u'day': 5, u'time': u'0100'}, u'open': {u'day': 4, u'time': u'0800'}}, {u'close': {u'day': 6, u'time': u'0100'}, u'open': {u'day': 5, u'time': u'0800'}}, {u'close': {u'day': 0, u'time': u'0100'}, u'open': {u'day': 6, u'time': u'0800'}}]}} 

我在這裏卡住了,即使我能夠返回兩個按鍵(open_now和週期), 我無法訪問週期的價值。

我該如何繼續?

>>> smalldict = dict[u'opening_hours'] 
>>> smallerdict = smalldict[u'periods'] 

這工作?

+0

你的代碼在哪裏? –

+0

會這樣工作 – user2560609

+1

@ user2560609鍵入示例時shell中會發生什麼?它工作嗎? – dm03514

回答

3

使用:

dic['opening_hours']['periods'] 

您檢索列表。這是你正在尋找的價值。您可以遍歷它,序列化等 - 這是所有你需要的:

>>> periods = dic['opening_hours']['periods'] 
>>> for period in periods: 
    print(period) 


{u'close': {u'day': 1, u'time': u'0100'}, u'open': {u'day': 0, u'time': u'0800'}} 
{u'close': {u'day': 2, u'time': u'0100'}, u'open': {u'day': 1, u'time': u'0800'}} 
{u'close': {u'day': 3, u'time': u'0100'}, u'open': {u'day': 2, u'time': u'0800'}} 
{u'close': {u'day': 4, u'time': u'0100'}, u'open': {u'day': 3, u'time': u'0800'}} 
{u'close': {u'day': 5, u'time': u'0100'}, u'open': {u'day': 4, u'time': u'0800'}} 
{u'close': {u'day': 6, u'time': u'0100'}, u'open': {u'day': 5, u'time': u'0800'}} 
{u'close': {u'day': 0, u'time': u'0100'}, u'open': {u'day': 6, u'time': u'0800'}} 

>>> for index, period in enumerate(periods, 1): 
    print('Period number %s starts %s, day %s, and ends %s, day %s.' % (
     index, 
     period['open']['time'], 
     period['open']['day'], 
     period['close']['time'], 
     period['close']['day'], 
    )) 


Period number 1 starts 0800, day 0, and ends 0100, day 1. 
Period number 2 starts 0800, day 1, and ends 0100, day 2. 
Period number 3 starts 0800, day 2, and ends 0100, day 3. 
Period number 4 starts 0800, day 3, and ends 0100, day 4. 
Period number 5 starts 0800, day 4, and ends 0100, day 5. 
Period number 6 starts 0800, day 5, and ends 0100, day 6. 
Period number 7 starts 0800, day 6, and ends 0100, day 0. 
+0

太棒了!...那是我的下一步 – user2560609

+0

@ user2560609:我很高興它幫助:) – Tadeck