自定义'带有订单的字典'数据结构的迭代器

时间:2013-10-15 14:53:04

标签: python data-structures iterator

对于我正在处理的应用程序,我需要存储一组项目以及与每个项目相关联的概率。我还需要一些方法来持续枚举项目,因此defaultdict不适合我的目的。

目前我将这些项目存储为第一个插槽中项目的元组列表,以及第二个插槽中的概率。

mydata = zip(range(0,10), numpy.random.dirichlet([1]*10))

是数据结构的一个例子(尽管可以有重复的键,正如我所描述的那样)。

我打算将它包装在一个类中,但是我希望迭代它更像是字典而不是列表,而且我不确定如何编写这种代码。

例如,我希望能够说出像

这样的内容
tree = [[wt, [sym, ""]] for sym, wt in mydata.items()]

(此示例取自Rosetta代码Huffman树)。

在Python中是否已经有了这样的东西,或者我可以扩展其行为的东西?

1 个答案:

答案 0 :(得分:1)

class MyIter(object):
    def __init__(self, data):
        self.data = data
        self.idx = -1

    def __iter__(self):
        return self

    def next(self):
        if self.idx >= len(self.data) - 1:
            raise StopIteration

        self.idx += 1
        return {self.data[self.idx][0]: self.data[self.idx][1]}


mydata = zip(range(0,10), range(100,110))

for it in MyIter(mydata):
    print it

Dry Run:

Assuming mydata is:
[(0, 100), (1, 101), (2, 102), (3, 103), (4, 104), (5, 105), 
(6, 106), (7, 107), (8, 108), (9, 109), (1, 101)]

and the output is:
{0: 100}
{1: 101}
{2: 102}
{3: 103}
{4: 104}
{5: 105}
{6: 106}
{7: 107}
{8: 108}
{9: 109}
{1: 101}  # Note: Duplicate entry
相关问题