python词典和项目()

时间:2017-09-24 17:42:53

标签: python loops dictionary

我的理解是.items()只适用于python词典。

然而,在以下完美运行的代码中,似乎.items()函数对于字符串是可用的。 (此代码用于doc2vec的预处理阶段)

我已经看了一段时间,我无法弄清楚为什么.items()似乎在这段代码中起作用。

在代码中,'来源'只是一个实例的属性。然而它能够调用.items()。

我在这里缺少什么?

class LabeledLineSentence(object):

    def __init__(self, sources):
        self.sources = sources

        flipped = {}

        # make sure that keys are unique
        for key, value in sources.items():
            if value not in flipped:
                flipped[value] = [key]
            else:
                raise Exception('Non-unique prefix encountered')

2 个答案:

答案 0 :(得分:0)

.items()适用于具有items方法的任何类。例如,我可以定义

class MyClass:
    def items(self):
        return [1,2,3,4]

然后运行

mc = MyClass()
for i in mc.items(): print(i)

据推测,您的sources对象属于具有此类属性的类。但我们不知道是什么,因为它是LabeledLineSentence的构造函数的论据。

您能指出我们的完整源代码吗?然后我们可以看到传入的内容。

答案 1 :(得分:0)

给定代码仅指定sources是实例的属性。它没有指定其类型。实际上,它可以是在创建LabeledLineSentence实例时指定的任何类型。

i1 = LabeledLineSentence('sample text') # sources is now a string. Throws error!
i2 = LabeledLineSentence({}) # source is a now a dictionary. No error!

请注意,LabeledLineSentence实现要求sources参数为字典。