【发布时间】:2016-07-27 11:04:16
【问题描述】:
我想弄清楚是否有一种隐式的方式来遍历列表元素。示例:使用列表someList = ['a','b','c'],当print(someList) 进行隐式 迭代时,您无需编写for 循环来迭代列表打印元素。
我有以下(简化的)python 代码:
class foo:
def __init__(self):
self.x=None
self.y=None
self.z=None
def set(self, x, y , z):
self.x = x
self.y = y
self.z = z
def get(self):
return {'x':self.x, 'y':self.y, 'z':self.z}
class bar:
def __init__(self):
self.foos=[]
def add(self, foo):
self.foos.append(foo)
def get(self):
return {'foos':self.foos}
使用
初始化f = foo()
f.set(1,2,3)
g = foo()
g.set(4,5,6)
h = bar()
h.add(f)
h.add(g)
然后调用
print(f.get())
print(g.get())
print(h.get())
这给了
{'z': 3, 'x': 1, 'y': 2}
{'z': 6, 'x': 4, 'y': 5}
{'foos': [<__main__.foo object at 0x0000000003541748>, <__main__.foo object at 0x000000000358C630>]}
我最终想要做的是返回类似 JSON 的结构或嵌套字典,以便 foo.get() 方法的返回包含在对 bar.get() 的调用中。
我意识到该数组不包含实际的 foo 对象(仅对它们的引用)。
我考虑过使用 迭代器,就像在 http://anandology.com/python-practice-book/iterators.html 中解释的那样。该示例的问题在于,要迭代的项目必须在数据结构中定义(即foo)。将迭代器包含在 bar 类中的问题在于 foos 列表可能不是唯一要迭代的集合:我本可以添加集合 foos2 (但不是为了简单起见)
我考虑了Access nested dictionary items via a list of keys? 的解决方案,但pprint 给了我类似于我自己的代码的东西。我也不确定reduce 函数的使用是否适用于我的情况。
我还考虑过在print 函数上进行运算符重载,但我不想得到一个字符串,只是一个易于显示和导航的数据结构。
有没有简单的方法或正确的方法来做到这一点?我是否使用了正确的数据结构(即我应该使用嵌套列表以外的东西)?
我还是 Python 新手,所以请温柔一点。
【问题讨论】:
-
您这样做仅仅是为了打印吗?还是您真的想将这些数据类型编组为可序列化的格式以保存在某处?
标签: python arrays json list dictionary