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

2024-09-29 21:25:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我要查两本字典的内容。我可以用c[0]['text']c[1]['text']得到它们。你知道吗

难道没有一种方法可以用一个命令来实现吗?你知道吗


Tags: 方法text命令内容字典indiceslahorerightnowpakvssl
3条回答

无法在一个操作中从字典列表访问所有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适用于单键情况。但是如果你有多个键,上面的方法会更有效。你知道吗

尝试以下简短方法:

print(list(map(lambda x:x['text'],c)))

输出:

['LahoreRightNow', 'PakvsSL']

如果列表满足单个命令约束,请使用

>>> [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对象转换为Python3中的列表。)

相关问题 更多 >

    热门问题