我是python的新手。 我想用一些自己的方法制作一个词典集合。这个问题分为两部分:
我该如何实现?我已经阅读了堆栈溢出的各种答案,建议使用collection.MutableSequence
或列表等。
class OrderedSetOfDictionaries(<something>):
def __init__(self, **kwargs):
<maybe super().__init__()>
<do I have to redefine methods if I do not wish to change their behavior>
所需数据结构的示例
ordered_set_of_dictionaries =
{
"dictionary_1" : {
"key_1": value_1,
"key_2": value_2,
<etc>
},
"dictionary_2" : {
"key_1": value_1,
"key_2": value_2,
<etc>
},
"dictionary_3" : {
"key_1": value_1,
"key_2": value_2,
<etc>
},
<etc>
}
ordered_set_of_dictionaries.last()
- &GT; <dictionary_n>
ordered_set_of_dictionaries["dictionary_1"]["key_1"]
- &GT; value_1
等
答案 0 :(得分:2)
这是通过继承OrderedDict来实现这一目标的一种方法。除last()
函数外,我还添加了first()
和ith(i)
函数。 ith(i)
的操作类似于列表索引。
from collections import OrderedDict
class ord_dict_with_indexing(OrderedDict):
def __init__(self, *args):
super(ord_dict_with_indexing, self).__init__(*args)
def ith(self, i):
return self.__getitem__(list(self.keys())[i])
def last(self):
return self.ith(-1)
def first(self):
return self.ith(0)
例如:
d = ord_dict_with_indexing()
d["dictionary_1"] = {"key_1":"value_1","key_2":"value_2"}
d["dictionary_2"] = {"key_3":"value_3","key_4":"value_4"}
d["dictionary_3"] = {"key_5":"value_1","key_2":"value_5"}
>>> d.first()
{'key_1': 'value_1', 'key_2': 'value_2'}
>>> d.last()
{'key_2': 'value_5', 'key_5': 'value_1'}
>>> d.ith(1)
{'key_3': 'value_3', 'key_4': 'value_4'}
>>> d['dictionary_1']['key_1']
'value_1'
请注意,订单将按添加元素的顺序显示。