只保留嵌套字典的第一个元素

Keep only the first element of a nested dict

比如有没有办法改变

{'z': {'pl': 0.1001692265,
  'sa': 0.0899505839},
 'y': {'ap': 0.0734830126}}

进入

{'z': {'pl': 0.1001692265},
 'y': {'ap': 0.0734830126}}

我正在寻找一种动态的解决方案,而不仅仅是基于这种情况下的密钥值(即 'sa')

谢谢!

字典里没有 'first element' 这样的东西。 Python 字典是无序的。

如果您需要一个类似字典的结构来维持秩序,OrderedDict 类型的 Python 的 collections 库是一个选项。

要获取第一个 key-value 对,以 d 作为原始字典,您可以使用:

# Using suggestion by Ch3steR
{k:dict([next(iter(v.items()))]) for k, v in d.items()}

或按照 MechanicPig 的建议使用 itertools.islice

{k:dict(itertools.islice(v.items(), 1)) for k, v in d.items()}

使用itertools.islice可能是最优雅的方式:

>>> dct = {'z': {'pl': 0.1001692265, 'sa': 0.0899505839}, 'y': {'ap': 0.0734830126}}
>>> {k: dict(islice(v.items(), 1)) for k, v in dct.items()}
{'z': {'pl': 0.1001692265}, 'y': {'ap': 0.0734830126}}

Python3.8+

在字典理解中,我们循环遍历外部字典。我们可以将内部字典转换为迭代器并使用 next 获取第一个元素。我们可以使用walrus operator来存储密钥。

{k: {(k1:=next(iter(v))): v[k1]} for k, v in d.items()}
# {'z': {'pl': 0.1001692265}, 'y': {'ap': 0.0734830126}}