如何将返回的字典变成一个大列表?
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
?至于格式,你说的horizontal是什么意思?我得到的输出是水平的。
我得到它的每一行都有一个 JID,就像 Imiguelvargasf 在他的评论中所说的那样。字典结果是 ma_search
@A Mist 如果可以从ma_search
发布一些示例数据,你会帮我解决这个问题。以上是关于如何将返回的字典变成一个大列表?的主要内容,如果未能解决你的问题,请参考以下文章
Python面试必考重点之列表,元组和字典第十五关——如何将[i for i in range(20)]变成产生器
Python Pandas:如何将列中的分组列表作为字典返回