【问题标题】:python dictionaries and items()python字典和项目()
【发布时间】:2017-09-24 17:42:52
【问题描述】:

我的理解是 .items() 仅适用于 python 字典。

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

我已经研究了一段时间,但我不明白为什么 .items() 似乎在这段代码中起作用。

在代码中,'sources' 只是实例的一个属性。然而它能够调用 .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')

【问题讨论】:

  • 代码中没有任何内容暗示sources(因此self.sources)不是dict-like对象。为什么你认为它是一个字符串?

标签: python loops dictionary


【解决方案1】:

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

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

请注意,LabeledLineSentence 实现期望源参数是一个字典。

【讨论】:

  • 感谢杰森的回答 :) 我只是一个初学者,像你这样的回答为我节省了很多时间。在我看过的所有 youtube python 视频中,都没有提到在创建时指定实例的类型。他们只是传递论点,仅此而已。这些事情对于初学者来说非常耗时,因为我什至不知道这些事情。再次感谢,看来我需要再次阅读初学者 Python 书籍。 :) :)
  • 如果您正在寻找书籍,我向初学者推荐“python 速成课程”。基本原理搞清楚了,就可以去看看《有效的python》或者《流畅的python》之类的书了
【解决方案2】:

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

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

然后运行

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-18
    • 2017-04-30
    • 2015-08-22
    • 1970-01-01
    • 2021-07-11
    • 2019-09-18
    • 2017-12-18
    • 1970-01-01
    相关资源
    最近更新 更多