我正在处理的属性有时列出其元素可以是字典或进一步嵌套的对象与属性等我想要执行一些切片,我对Python的掌握只能用什么感觉深深地解开Pythonic。pythonic切片的嵌套属性
我最小的代码如下所示:
class X(object):
def __init__(self):
self.a = []
x=X()
x.a.append({'key1':'v1'})
x.a.append({'key1':'v2'})
x.a.append({'key1':'v3'})
# this works as desired
x.a[0]['key1'] # 'v1'
我想执行的嵌套词典一键访问,但作出这样的呼吁包含字典列表中的所有元素。这样做的标准的Python的方式将是一个列表理解一拉:
[v['key1'] for v in x.a]
然而,我的小例子,并不完全传达我的真实世界场景中嵌套的全部范围:类属性列表a
X
可能包含对象,其属性是对象,其属性是字典,其键在迭代外部列表时要选择它们的键。
# I would like something like
useful_list = x.a[:]['key1'] # TypeError: list indices must be integers, not str
# or even better
cool_list = where(x.a[:]['key1'] == 'v2') # same TypeError
如果我开始列表理解每个有趣的关键,它很快就不会看到所有的Pythonic。有没有这样做的好方法,或者我必须为所有可能的列表和字典键配对编写'getter'方法?
更新: 我一直在阅读有关重载列表。显然,可以混淆getitem方法,该方法用于dict的列表和键的索引。也许是一个遍历列表成员的自定义类。这是开始设计的...
完全按照需要工作。谢谢。它也有一个更安全的感觉,因为使显式更改(通过一种新方法访问,而不是重新定义x ['key1']的作用)。尼斯 – DrSAR 2013-03-10 10:05:21
很高兴我能帮到你! – shx2 2013-03-10 10:25:01