gpt4 book ai didi

python - 将引用字典与字典列表相匹配

转载 作者:行者123 更新时间:2023-12-02 01:58:00 25 4
gpt4 key购买 nike

所以我有一个引用字典

ref = {"a": 1, "b": 2}

和字典列表

dict_list = [{"a": 1, "b": 2, "c": "success!"}, {"a": 1, "b": 3, "c": "nope!"}]

我想要的是在 dict_list 中找到与 reference 匹配的字典,并返回值 c (即 “成功!”)。我能够做到这一点,但我根本不喜欢这个解决方案:

In [7]: import pandas as pd
...: def f(ref, dict_list):
...: df = pd.DataFrame.from_records(dict_list)
...: return df.loc[(df["a"] == ref["a"]) & (df["b"] == ref["b"])].c[0]
...:
...: f(ref, dict_list)
Out[7]: 'success!'

如果有人有更优雅的东西(最好是纯Python)那就太好了!

最佳答案

使用next :

>>> next((x['c'] for x in dict_list if ref.items() < x.items()))
'success!'
>>>

或者:

>>> next((x['c'] for x in dict_list if dict(x, **ref) == x))
'success!'
>>>

这将获得 key cref字典是迭代器字典的子集。这不仅适用于 ab键,它适用于所有情况。

在 Python 3 中,要检查一个字典是否是另一个字典的子集,可以使用 <运算符。

对于第二种情况,由于字典不能有额外的键,因此它连接两个字典并确定它是否与原始字典迭代器相同,如果是,则生成 c来自迭代器的键 x .

编辑:

正如 @sj95126 提到的,从 Python 3.9 开始,您可以使用串联方法:

>>> next((x['c'] for x in dict_list if x | ref == x))
'success!'
>>>

这与 dict(x, **ref) 的逻辑相同.

编辑2:


显然,你可以这样做:

>>> next((x['c'] for x in dict_list if [x['a'], x['b']] == list(ref.values())))
'success!'
>>>

仅限 ab键。

关于python - 将引用字典与字典列表相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69400535/

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