使用单个命令从字典列表中获取特定键的所有值

时间:2018-04-04 08:57:41

标签: python list dictionary

c = [{'text': 'LahoreRightNow', 'indices': [111, 126]},
    {'text': 'PakvsSL', 'indices': [127, 135]}]

我想访问两个词典的文本。我可以使用c[0]['text']c[1]['text']来获取它们。

使用单个命令是不是有办法做到这一点?

3 个答案:

答案 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']