gpt4 book ai didi

python - 从嵌套的字典和列表中提取数据

转载 作者:行者123 更新时间:2023-11-28 21:53:48 25 4
gpt4 key购买 nike

假设我有一个看起来像这样的字典:

dic = {'outer_key_1': {'inner_key_1': [1, 2, 3],
'inner_key_2': [4, 5, 6],
'inner_key_3': [7, 8, 9]},
'outer_key_2': {'inner_key_1': [11, 12, 13],
'inner_key_2': [14, 15, 16],
'inner_key_3': [17, 18, 19]}}

我的目标是提取每个内部字典的第一个元素,以嵌套列表结束:

[[1, 4, 7], [11, 14, 17]]

或者,或者,像这样的字典:

{'outer_key_1': [1, 4, 7], 'outer_key_2': [11, 14, 17]}

我尝试过使用嵌套列表推导式到达那里,但我能想到的最好结果是结果值的非嵌套列表(或多或少 [1, 4, 7, 11, 14, 17 ] 除了值会混淆,这应该很容易通过使用 OrderedDict 来修复)。这是一个使用 for 循环的相当丑陋的解决方案,但我相信这里有人可以想出更好的办法。

# TODO: find a better way to do this
result = []
for inner_dict in dic.values():
result.append([l[0] for l in inner_dict.values()])
print(result)

哪个打印(再一次,值混淆了,但这不是手头的问题):

[[14, 17, 11], [4, 7, 1]]

解决该问题的最优雅方法是什么?我是 python 的新手,所以对如何解决该问题的任何提示表示赞赏。我也尝试过使用 zip 进行试验,我认为这应该是一个很好的方法,但我仍然需要思考如何将它与列表理解一起使用,所以......有什么建议吗?

最佳答案

这是一种方法:

>>> {outerKey: [innerVal[0] for innerVal in outerVal.itervalues()] for outerKey, outerVal in dic.iteritems()}
{'outer_key_1': [4, 7, 1], 'outer_key_2': [14, 17, 11]}

这是一个字典推导式,里面有一个列表推导式。外部字典理解迭代外部字典的键值对。内部列表理解生成每个内部值中第一项的列表(即内部字典中的每个列表)。

如果您想要一个列表,只需将字典理解变成列表理解(删除对外键的引用):

>>> [[innerVal[0] for innerVal in outerVal.itervalues()] for outerKey, outerVal in dic.iteritems()]
[[14, 17, 11], [4, 7, 1]]

请注意,您无法控制列表的顺序,因为原始字典是无序的。

关于python - 从嵌套的字典和列表中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25491265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com