c = [{'text': 'LahoreRightNow', 'indices': [111, 126]},
{'text': 'PakvsSL', 'indices': [127, 135]}]
我想访问两个词典的文本。我可以使用c[0]['text']
和c[1]['text']
来获取它们。
使用单个命令是不是有办法做到这一点?
答案 0 :(得分:3)
如果列表推导满足您的单一命令约束,请使用
>>> [dic['text'] for dic in c]
['LahoreRightNow', 'PakvsSL']
这是
的简写>>> result = []
>>> for dic in c:
... result.append(dic['text'])
...
>>> result
['LahoreRightNow', 'PakvsSL']
它没有比这里的理解更多的单命令式,但如果你更喜欢函数式编程风格,你可以隐藏for
循环:
>>> from operator import itemgetter
>>> map(itemgetter('text'), c)
['LahoreRightNow', 'PakvsSL']
(使用list(map(...))
将map-object转换为Python3中的列表。)
答案 1 :(得分:1)
无法从词典列表中访问单个操作中的所有text
个键。
您可以创建一个函数,但此函数可以单独对每个字典执行操作。
您可以做的是在自己执行聚合后创建新词典。执行此操作的最佳方法是通过collections.defaultdict
:
from collections import defaultdict
d = defaultdict(list)
for my_d in c:
for k, v in my_d.items():
d[k].append(v)
# defaultdict(<class 'list'>, {'text': ['LahoreRightNow', 'PakvsSL'],
# 'indices': [[111, 126], [127, 135]]})
然后d['text']
将返回您需要的列表。
@timgeb's list comprehension适用于单一密钥案例。但是如果你有多个键,上面的方法会更有效。
答案 2 :(得分:0)
尝试这种简短的方法:
print(list(map(lambda x:x['text'],c)))
输出:
['LahoreRightNow', 'PakvsSL']