Equ*_*Dev 2 python dictionary iterator python-3.x
在一个定义的对象中,一些值保存在a中dict,我希望迭代内容,dict就像在引用plain时一样dict,因此直接访问使用[],并使用例如循环.items().代码结构是:
class Klass:
def __init__(self, values):
self.values = values
self.more = None
def __getitem__(self, name):
return self.values[name]
def __iter__(self):
pass # TBD[How to make this ?]
d = {'alfa': 1, 'bravo': 2, 'charlie': 3}
k = Klass(d)
for key in k:
print(key) # Expected to print keys from self.values
for (key, value) in k.items():
print(key, value) # Expected to print key and value from self.values
for key in k.keys():
print(key) # Expected to print key from self.values
for value in k.values():
print(value) # Expected to print value from self.values
Run Code Online (Sandbox Code Playgroud)
如何编写__iter__和其他必需的方法,以便通过Klass的实例进行这种访问?
Mar*_*ers 10
你必须执行.keys(),.values()和.items()自己的方法; 与__iter__他们一起可以将实际工作委托给self.values()字典:
class Klass:
def __init__(self, values):
self._values = values
self.more = None
def __getitem__(self, name):
return self._values[name]
def __iter__(self):
return iter(self._values)
def keys(self):
return self._values.keys()
def items(self):
return self._values.items()
def values(self):
return self._values.values()
Run Code Online (Sandbox Code Playgroud)
我重命名了该属性以避免屏蔽该.values()方法.
委托__iter__迭代字典(通过键)的最简单方法是使用该iter()函数获取字典对象的迭代器.
要明确:__iter__起着怎样的作用没有.keys(),.values()并.items()进行处理; 后者只是更多的方法.
| 归档时间: |
|
| 查看次数: |
3472 次 |
| 最近记录: |