gpt4 book ai didi

python - 难以从理解中获取关键值(value)

转载 作者:行者123 更新时间:2023-12-01 01:06:37 26 4
gpt4 key购买 nike

我试图弄清楚如何从几乎有效的理解中获取值(value)。从这个数据来看..

{'rock': {}, 'coal1': {'gold1': {'data': ['g1']}}, 'coal2': {'gold3': {'data': ['g3']}, 'gold2': {'data': ['g2']}}}

..我试图将 key 匙数据提取到简单的字典中。即 { gold : {'data' : [...]} } 项的字典本质上是从数据中剔除煤炭键。

换句话说,从此..

{
"coal2": {
"gold3": {
"data": [
"g3"
]
},
"gold2": {
"data": [
"g2"
]
}
},
"coal1": {
"gold1": {
"data": [
"g1"
]
}
},
"rock": {}
}

转换为这种格式

{
"gold3": {
"data": [
"g3"
]
},
"gold1": {
"data": [
"g1"
]
},
"gold2": {
"data": [
"g2"
]
}
}

这几乎可以工作了。这样就可以摆脱岩石了。

>>> {k:d for k,d in data.items() if k != 'rock'}
{'coal2': {'gold3': {'data': ['g3']}, 'gold2': {'data': ['g2']}}, 'coal1': {'gold1': {'data': ['g1']}}}

获取这些值就可以摆脱煤键。

>>> [v for v in {k:d for k,d in data.items() if k != 'rock'}.values()]
[{'gold3': {'data': ['g3']}, 'gold2': {'data': ['g2']}}, {'gold1': {'data': ['g1']}}]

但我不知道如何从中得到

>>> for i in [v for v in {k:d for k,d in data.items() if k != 'rock'}.values()] : print(i)
...
{'gold3': {'data': ['g3']}, 'gold2': {'data': ['g2']}}
{'gold1': {'data': ['g1']}}

到所需的结构。如果这一切都可以通过理解来完成,那就太好了。有谁知道如何实现这一点?

编辑:这两个答案都很棒,我希望我能接受这两个答案。我喜欢不导入任何东西,但我接受 @blhsing itertools 版本只是因为它更容易理解并且性能更好。顺便说一句,即使岩石具有值(value),也必须丢弃,因此我无法绕过 if k != 'rock'。这是结果......谢谢大家。

>>> import timeit
>>> data = {'rock': {'type':'pebble'}, 'coal1': {'gold1': {'data': ['g1']}}, 'coal2': {'gold3': {'data': ['g3']}, 'gold2': {'data': ['g2']}}}
>>> timeit.timeit( "dict(kv for x in (v for v in {k:d for k,d in data.items() if k != 'rock'}.values()) for kv in x.items())" , setup="from __main__ import data")
2.6714617270044982
>>>
>>> timeit.timeit( "dict(chain.from_iterable(g.items() for g in {k:d for k,d in data.items() if k != 'rock'}.values()))" , setup="from __main__ import data; from itertools import chain")
2.22612579818815
>>>

最佳答案

您可以使用生成器表达式来输出主字典值的子字典的项目,并使用 itertools.chain.from_iterable 连接这些项目,并将它们传递给 dict 构造函数:

from itertools import chain
dict(chain.from_iterable(g.items() for g in d.values()))

因此给定:

d = {'rock': {}, 'coal1': {'gold1': {'data': ['g1']}}, 'coal2': {'gold3': {'data': ['g3']}, 'gold2': {'data': ['g2']}}}

返回:

{'gold3': {'data': ['g3']}, 'gold2': {'data': ['g2']}, 'gold1': {'data': ['g1']}}

关于python - 难以从理解中获取关键值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55291463/

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