gpt4 book ai didi

python - 我如何在 Python 的字典中请求子键的键?

转载 作者:太空宇宙 更新时间:2023-11-03 15:08:32 25 4
gpt4 key购买 nike

如果我有一个字典中的字典,我如何在常数时间内请求一个键?例如:

def get_hobby(hobby):
d = {'An' : {'Hobby': "Paintball", 'Age' : 22}, 'Jef' : {'Hobby' : "Football", 'Age': 24}, 'Jos' : {'Hobby': "Paintball", 'Age' : 46}}
assert get_hobby("Paintball") == ['An', 'Jos']

这行不通:

return d.keys[hobby]

最佳答案

使用列表理解:

return [name for name, props in d.items() if props['Hobby'] == hobby]

d.items() 为您提供一系列 (key, value) 对,其中值是嵌套字典。列表理解通过将 hobby 变量与嵌套的 'Hobby' 键匹配来过滤这些,生成过滤器测试返回的名称列表 True.

你不能在常数时间内请求 key ,因为那个数字是可变的。

演示:

>>> def get_hobby(hobby):
... d = {'An' : {'Hobby': "Paintball", 'Age' : 22}, 'Jef' : {'Hobby' : "Football", 'Age': 24}, 'Jos' : {'Hobby': "Paintball", 'Age' : 46}}
... return [name for name, props in d.items() if props['Hobby'] == hobby]
...
>>> get_hobby("Paintball")
['Jos', 'An']

请注意,返回的键列表是任意顺序,因为字典没有固定顺序。您不能简单地针对另一个列表测试该列表并期望它每次都相等,因为列表确实有顺序。确切的顺序取决于 Python hash seed以及字典的插入和删除历史。

您可能希望返回一个集合;集合也没有顺序,更好地反射(reflect)了返回的匹配键的性质:

return {name for name, props in d.items() if props['Hobby'] == hobby}

之后你的断言会变成:

assert get_hobby("Paintball") == {'An', 'Jos'}

关于python - 我如何在 Python 的字典中请求子键的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930051/

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