我有以下格式的詞典:
dict_list = {'S0':[[list of int],[list of int]], 'S1':[[list of int],[list of int]], ...}
與S0的通過
dict_list['S0'][0] and dict_list['S0'][1]
訪問的整數的列表
爲了提高代碼的可讀性,我將「列表清單」更改爲「列表字典」,如下所示:
dict_dict = {'S0': {'list0': [list of int], 'list1': [list of int]}, ...}
訪問列表時,這導致更可讀代碼:
dict_dict['S0']['list0'] and dict_dict['S0']['list1']
味酸問題
然而,當我酸洗並保存到文件的dict_dict,原來的懲罰具有附加的字典鍵實際上與「S#」條目的數量成比例地縮放。看起來,醃菜不是「巧妙地」存儲字典,因爲它分開存儲每個字母鍵。
現在,我們意識到,畢竟,這是醃菜應該如何工作,因爲每個'S#'可能有不同的鑰匙組。鹹菜沒有辦法事先知道我們的dict_dict實際上只是一個有定期重複字段的表。
問題
我的問題是,是否有dict_list
替代,其中整數的列表可以通過一個字符串鍵來訪問(如在dict_dict
),但沒有上述鹹菜罰?
UPDATE:實驗基於評論鑑於
3,100 bytes - dict_list['S0'][0] (list.bin)
3,314 bytes - dict_dict['S0']['list0'] (dict.bin)
3,922 bytes - dict_class['S0'].list0 (class.bin)
5,855 bytes - dict_namedtuple['S0'].list0 (namedtuple.bin)
s_list = ['S0','S1','S2','S3','S4','S5','S6','S7','S8','S9','S10','S11','S12','S13','S14','S15','S0a','S1a','S2a','S3a','S4a','S5a','S6a','S7a','S8a','S9a','S10a','S11a','S12a','S13a','S14a','S15a','AA0','AA1','AA2','AA3','AA4','AA5','AA6','AA7','AA8','AA9','AA10','AA11','AA12','AA13','AA14','AA15','AA0a','AA1a','AA2a','AA3a','AA4a','AA5a','AA6a','AA7a','AA8a','AA9a','AA10a','AA11a','AA12a','AA13a','AA14a','AA15a','BB0','BB1','BB2','BB3','BB4','BB5','BB6','BB7','BB8','BB9','BB10','BB11','BB12','BB13','BB14','BB15','BB0a','BB1a','BB2a','BB3a','BB4a','BB5a','BB6a','BB7a','BB8a','BB9a','BB10a','BB11a','BB12a','BB13a','BB14a','BB15a']
num_of_s_entries = 32
list_length = 5
def pickle_n_save(dict_var, filename):
outfile = open(filename, "wb")
pickle.dump(dict_var, outfile)
outfile.close()
# ------------------------------------------------------------dict_list['S0'][0]
dict_list = {}
for s in s_list[0:num_of_s_entries]:
dict_list[s] = [[],[]]
for pts in range(0,list_length):
dict_list[s][0].append(randrange(1,100))
dict_list[s][1].append(randrange(1,100)*1000)
pickle_n_save(dict_list, "list.bin")
# -----------------------------------------------------dict_dict['S0']['list0']
dict_dict = {}
for s in dict_list.keys():
dict_dict[s] = {}
dict_dict[s]['list0'] = dict_list[s][0]
dict_dict[s]['list1'] = dict_list[s][1]
pickle_n_save(dict_dict, "dict.bin")
# -------------------------------------------------------dict_class['S0'].list0
class S:
def __init__(self, list0, list1):
self.list0 = list0
self.list1 = list1
dict_class = {}
for s in dict_list.keys():
dict_class[s] = S(dict_list[s][0],dict_list[s][1])
pickle_n_save(dict_class, "class.bin")
# ---------------------------------------------------dict_namedtuple['S0'].list0
S_namedtuple = namedtuple('S_namedtuple', ['list0','list1'])
dict_namedtuple = {}
for s in dict_list.keys():
dict_namedtuple[s] = S_namedtuple(dict_list[s][0],dict_list[s][1])
pickle_n_save(dict_namedtuple, "namedtuple.bin")
我真的不知道如何使用'list1''作爲關鍵字比只使用'1'作爲列表索引更具可讀性或更好。 – BrenBarn 2013-05-11 04:58:32
我不知道,但我更喜歡用'日期'和'人'作爲關鍵詞,而不是必須記住0代表'日期',1代表'人'。 – silvernightstar 2013-05-11 05:01:10
爲什麼不使用'日期'和'人'作爲屬性的類?這是否也會增加罰款? – 2013-05-11 05:06:20