冒号:列表中的运算符
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']
我习惯使用 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']