0

对于我正在处理的应用程序,我需要存储一组项目以及与每个项目关联的概率。我还需要某种方式来一致地枚举项目,因此 defaultdict 并不适合我的目的。

目前,我将项目存储为元组列表,项目在第一个插槽中,概率在第二个插槽中。

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

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

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

例如,我希望能够说类似的话

tree = [[wt, [sym, ""]] for sym, wt in mydata.items()]

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

有没有什么东西已经在 Python 中做到了这一点,或者我可以扩展它的行为?

4

1 回答 1

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

空跑:

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
于 2013-10-27T10:27:19.747 回答