Python:有序字典集合的子类或元类

时间:2016-11-25 14:19:57

标签: python dictionary

我是python的新手。 我想用一些自己的方法制作一个词典集合。这个问题分为两部分:

  1. 我应该使用列表或字典作为此容器的模板吗?
  2. 我该如何实现?我已经阅读了堆栈溢出的各种答案,建议使用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>
    
  3. 所需数据结构的示例

    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

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'

请注意,订单将按添加元素的顺序显示。