如何将返回的字典变成一个大列表?

Posted

技术标签:

【中文标题】如何将返回的字典变成一个大列表?【英文标题】:How to turn returned Dictionaries into one large list? 【发布时间】:2019-08-27 22:01:51 【问题描述】:

我有一小段代码可以查询我们在数据库中具有某些属性的作业。然后我想单独隔离作业 ID,我已经这样做了,但它会在一堆不同的字典中返回结果。

如何将所有字典合并在一起,然后将其转换为仅包含作业 ID 的 1 个大列表?我正在使用 Python 2.7。

import pprint


with aftractor.utils.tractor_connection() as tq:
    ma_jobs = tq.jobs('not done and maxactive', columns=['jid', 'title'])
    ma_search = tq.jobs('not done and maxactive', columns=['jid'])
    pp = pprint.PrettyPrinter(indent=4)
    pp.pprint(ma_jobs)

print ma_search

返回值:

[u'jid': 3207827, u'jid': 3221652, u'jid': 3221482, u'jid': 3221109, u'jid': 3229185, u'jid':3228951,u'jid':3228953,u'jid':3228952,u'jid':3228960,u'jid':3228956,u'jid': 3228950,u'jid':3228022,u'jid':3227226,u'jid':3227982,u'jid':3227985,u'jid':3227984,u 'jid': 3227980, u'jid': 3229049, u'jid': 3228337]

我想要什么:

[3207827,3221652,3221482,2221109,229185,3228951,228953,2228952,228960,2228956,322895,3228956,322895,2228956,22726,3227982,227985,2227984,3227985,2227984,3227985,3227984,3227985,3227984,3227980,3227984,3227980,2227984,3227980,2229049,3227980,3229049,3228337]

【问题讨论】:

【参考方案1】:

使用以下理解:

>>> [d[u'jid'] for d in ma_jobs]
[3207827,
 3221652,
 3221482,
 3221109,
 3229185,
 3228951,
 3228953,
 3228952,
 3228960,
 3228956,
 3228950,
 3228022,
 3227226,
 3227982,
 3227985,
 3227984,
 3227980,
 3229049,
 3228337]

基本上,您使用的是列表推导。 ma_jobs 中的每个元素都是一个字典,其中有一个元素,其键为 u'jid',因此您基本上获取与该键关联的值,并将其添加到动态创建的列表中。

【讨论】:

不确定我是否遵循,您能否详细说明我将如何在现有结构中实现这段代码? @AMist,我刚刚添加了更详细的解释,并且此代码在 Python 2 中有效。【参考方案2】:

您可以在ma_jobs = tq.jobs('not done and maxactive', columns=['jid', 'title']) 之后使用map 函数:

result = list(map(lambda elem: elem['jid'], ma_jobs))

结果:

[3207827, 3221652, 3221482, 3221109, 3229185, 3228951, 3228953, 3228952, 3228960, 3228956, 3228950, 3228022, 3227226, 3227982, 3227985, 3227984, 3227980, 3229049, 3228337]

【讨论】:

几个问题,这摆脱了我的 ma_jobs 查询,它与 ma_search 查询分开。我两个都需要。我尝试以相同的格式将其应用于 ma_search,但它说 map() 至少需要两个参数。此外,它以垂直格式返回列表,如上所示我的 imiguelvargasf 我需要如上所示的水平格式。 您发布的词典列表是ma_jobs 还是ma_search?至于格式,你说的horizo​​ntal是什么意思?我得到的输出是水平的。 我得到它的每一行都有一个 JID,就像 Imiguelvargasf 在他的评论中所说的那样。字典结果是 ma_search @A Mist 如果可以从ma_search 发布一些示例数据,你会帮我解决这个问题。

以上是关于如何将返回的字典变成一个大列表?的主要内容,如果未能解决你的问题,请参考以下文章

把列表变成字典?

如何只计算字典中的单词,同时返回字典键名的计数

Python面试必考重点之列表,元组和字典第十五关——如何将[i for i in range(20)]变成产生器

Python Pandas:如何将列中的分组列表作为字典返回

如何将返回的python JSON字典转换为字典中的列表,并将数据转换为SQL插入

如何将字典列表合并到单个字典中?