字符串/字典/列表索引的短名称

时间:2013-12-01 12:35:02

标签: python list dictionary

在python中,我似乎需要经常在dicts / lists中的dicts / lists中创建dicts / lists,然后在复杂的if / elif / else树中访问这些结构。是否有某种程度上我可以通过简写的方式访问该数据结构的某个级别,以使代码更简洁。

这是一个示例代码行:

schema[exp][node]['properties']['date'] = i.partition('(')[2].rpartition(')')[0].strip()

后面是一整行以“schema [exp] [node] ['properties'] ['foo']开头的其他行 我想要的是:

reference_maker(schema[exp][node]['properties']['date'], schema_props)
schema_props['date'] = i.partition('(')[2].rpartition(')')[0].strip()

但我甚至不知道从哪里开始。

2 个答案:

答案 0 :(得分:2)

如果你不担心它会改变:

schema_props = schema[exp][node]['properties']
schema_props['date'] = ...

但是如果你想让引用挂起并自动更新:

schema_props = lambda: schema[exp][node]['properties']
schema_props()['date'] = ...

node = node + 1

# this now uses the next node
schema_props()['date'] = ...

或没有lambda:

def schema_props():
    return schema[exp][node]['properties']

schema_props()['date'] = ...

node = node + 1

# this now uses the next node
schema_props()['date'] = .

答案 1 :(得分:1)

不确定我理解但是以下问题是什么?

schema_props = schema[exp][node]['properties']
schema_props['date'] = i.partition('(')[2].rpartition(')')[0].strip()

当然,你必须要小心,schema_props总是指向你的词典中仍然有效的条目。 IE浏览器。手动重置schema[exp][node]['properties']后,您的schema_props引用将不再更新原始字典。

对于更精细的间接处理,您可以构建自己的集合类型,然后可以始终保持对基本字典的引用。 (另见:http://docs.python.org/2/library/collections.html#collections-abstract-base-classes