对于我正在处理的应用程序,我需要存储一组项目以及与每个项目相关联的概率。我还需要一些方法来持续枚举项目,因此defaultdict不适合我的目的。
目前我将这些项目存储为第一个插槽中项目的元组列表,以及第二个插槽中的概率。
mydata = zip(range(0,10), numpy.random.dirichlet([1]*10))
是数据结构的一个例子(尽管可以有重复的键,正如我所描述的那样)。
我打算将它包装在一个类中,但是我希望迭代它更像是字典而不是列表,而且我不确定如何编写这种代码。
例如,我希望能够说出像
这样的内容tree = [[wt, [sym, ""]] for sym, wt in mydata.items()]
(此示例取自Rosetta代码Huffman树)。
在Python中是否已经有了这样的东西,或者我可以扩展其行为的东西?
答案 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