2013-03-23 104 views

回答

2

您可以使用嵌套的字典:

data[year] = {} 
data[year][month] = [day] 

爲了使這一點變得更容易,你可以用collections.defaultdict

from collections import defaultdict 

data = defaultdict(dict) 

data[year][month] = [day] 

甚至:

def monthdict(): 
    return defaultdict(list) 
data = defaultdict(monthdict) 

data[year][month].append(day) 

演示後者結構:

>>> from collections import defaultdict 
>>> def monthdict(): 
...  return defaultdict(list) 
... 
>>> data = defaultdict(monthdict) 
>>> data[2013][3].append(23) 
>>> data 
defaultdict(<function monthdict at 0x10c9d0500>, {2013: defaultdict(<type 'list'>, {3: [23]})}) 
+0

我正在使用data = defaultdict(list),因此造成了一陣混亂。 – Hick 2013-03-23 17:05:20

+0

要繼續這一點,如果我可以達到在雙字典列表中的最裏面的元素(或稱爲別的?)的遍歷是Theta(n^3)正確嗎?有沒有更復雜的方法來存儲這樣的數據? Python是否提供更好的數據結構? – Hick 2013-03-23 17:09:12

+1

@Hick:不,「dict」訪問只有O(1)。如果您搜索整個列表,那麼對於列表長度n,就是O(n)。遍歷日期列表完全是在不斷的時間內完成的。 – 2013-03-23 17:10:07

1

你可以使用一個詞典的詞典嗎?

data = {'1972' : { 
        '01': ['a', 'list', 'of', 'things'], 
        '02': ['another', 'list', 'of', 'things'], 
        }, 
     '1973' : { 
        '01': ['yet', 'another', 'list', 'of', 'things'], 
        }, 
     }   

>>> data['1972']['02'] 
['another', 'list', 'of', 'things'] 

>>> data['1972']['01'].append(42) 
>>> data 
{'1972': {'01': ['a', 'list', 'of', 'things', 42], 
    '02': ['another', 'list', 'of', 'things']}, 
'1973': {'01': ['yet', 'another', 'list', 'of', 'things']}} 
相關問題