python词典和项目()
我的理解是.items()仅适用于python字典。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')
给定的代码仅指定来源是实例的属性。它没有指定它的类型。实际上它可以是创建LabeledLineSentence实例时指定的任何类型。
i1 = LabeledLineSentence('sample text') # sources is now a string. Throws error!
i2 = LabeledLineSentence({}) # source is a now a dictionary. No error!
请注意,LabeledLineSentence实现需要sources参数为字典。
谢谢你的答案Jayson :)我只是一个初学者,像你这样的答案为我节省了很多时间。在我看过的所有youtube python vids中,没有一个提到在创建时指定实例的类型。他们只是通过争论,就是这样。这些东西对于初学者来说非常耗时,因为我甚至都不知道这些东西。再次感谢,看起来我需要再次击中初学者的Python书。 :) :) –
如果你正在寻找书籍,我建议初学者的“蟒蛇速成课程”。一旦基本原理明确,您可以查看诸如“有效的Python”或“流利的Python”等书籍, –
.items()适用于任何具有item方法的类。例如,我可以定义
class MyClass:
def items(self):
return [1,2,3,4]
,然后运行
mc = MyClass()
for i in mc.items(): print(i)
想必你sources
对象是具有这样的属性一类的。但是我们不知道是什么,因为它是LabeledLineSentence
的构造函数的一个参数。
您能指教我们完整的源代码吗?然后,我们可能会看到正在传入的内容。
感谢您的回答哈里:) –
代码中没有任何东西显示暗示'sources'(因此'self.sources')不是类似dict'的对象。你为什么认为这是一个字符串? – kdopen