gpt4 book ai didi

python - 列表理解以展平字典的字典

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

我有一个字典的字典:

my_dict = {
'a': {(1,2): True,
(1,3): False},
'b': {(1,4): True,
(2,3): False}
}

字典总是这种形式,但每个“子”字典都有一组不同的键:my_dict['a'][(1,2)] 存在,但不存在这意味着 my_dict['b'][(1,2)] 也存在。

我想要一个 bool 值列表(无特定顺序):

[True, False, True, False]

我正在尝试使用单个列表理解来完成此操作:

[my_dict[letter][pair] for pair in my_dict[letter] for letter in my_dict]

这引发了一个错误:

---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-142-dc1565efcdc8> in <module>()
6 }
7
----> 8 [my_dict[letter][pair] for pair in my_dict[letter] for letter in my_dict]
KeyError: (2, 3)

它似乎在 my_dict['a'] 和 my_dict['b'] 中寻找 (2,3)。我以为我写的理解只会在适当的字典中寻找键。

我看过 this solution这可以用来压平任何嵌套的字典。我也知道我可以用命令式循环暴力破解它。我只是想了解为什么列表理解没有按照我写的方式工作。

最佳答案

您想遍历值的值:

[v for nested in outer.itervalues() for v in nested.itervalues()]

请注意,循环需要按照您嵌套它们的方式进行排序;外循环优先:

for nested in outer.itervalues():
for v in nested.itervalues():
# use v

你把顺序搞混了;你的代码只给出了 KeyError 因为你有一个预先存在的 letter global.

演示:

>>> my_dict = {
... 'a': {(1,2): True,
... (1,3): False},
... 'b': {(1,4): True,
... (2,3): False}
... }
>>> [v for nested in my_dict.itervalues() for v in nested.itervalues()]
[True, False, False, True]

关于python - 列表理解以展平字典的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28015458/

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