冒号:列表中的运算符

Colon : operator in a list

我习惯使用 Matlab 及其强大的冒号运算符。 Python中似乎有等价物,但当它包含dict时就不完全等价了。 这是我的例子:

data = [
    {'key1' : 'value1', 'key2' : 'value2'},
    {'key1' : 'value3', 'key2' : 'value4'},
    {'key1' : 'value1', 'key2' : 'value5'}
]

data[0:2] 有效并且 returns [{'key1': 'value1', 'key2': 'value2'}, {'key1': 'value3', 'key2': 'value4'}](但是我会本能地使用 0:1 来获得相同的结果)

但是

data[0:2]['key2'] 没有,returns list indices must be integers, not str

我应该断定 : 只能用于不包含 dict 的列表,还是我打错了?

谢谢,

Should I conclude that : can be used only on list not containing dict, or I am typing it wrong?

这不是一个正确的结论。 : 可用于任何列表。

问题是 data[0:2] 是一个列表。 如果您想获得 data[0:2] 中元素的 'key2' 值的列表,那么您需要将其写为列表理解:

>>> [v['key2'] for v in data[0:2]]
... ['value2', 'value4']

如果您更喜欢使用运算符而不是列表理解,则可以使用以下内容:

>>> from operator import itemgetter
>>> map(itemgetter('key2'), data[0:2])
... ['value2', 'value4']