gpt4 book ai didi

python - 当每个键有多个值时,根据值获取键列表

转载 作者:行者123 更新时间:2023-12-01 09:20:17 25 4
gpt4 key购买 nike

当每个键有多个值时,如何根据一个值获取键列表?

下面的代码可以在值为单个对象时获取列表。但是,当有多个对象作为值或值中存在其他数据时,它无法获取键。

mydict = {
'romeo': 16,
'juliette': 16,
'zena': 'red',
'gabby': 'red',
'lauren': 'smart',
'betty': 'smart',
'kristen': 'sweet',
'lisa': 'sweet',
'lucy': ['smart', 'sweet'],
'shawna': 'green field',
'terry' : 'the green field is on fire',
'dorothy': 'shelly plays on the green field',
'jenny': ['intelligent', 'cuts the smart green field grass'],
}

needle = 'green field'
filtered_keys = [k for k, v in mydict.items() if v == needle]
print(filtered_keys)

needle = 16时,输出正确:['romeo', 'juliette']

needle = 'red'时,输出正确:['zena', 'gabby']

needle = 'smart'时,输出不正确:['lauren', 'betty']
预期输出为['lauren', 'betty', 'lucy', 'jenny']

needle = 'sweet'时,输出不正确:['kristen', 'lisa']
预期输出为 ['kristen', 'lisa', 'lucy']

needle = 'green field'时,输出不正确:['shawna']
预期输出为['shawna', 'terry', 'dorothy', 'jenny']

最佳答案

另一个答案不处理当needlein列表in字符串中的情况。也就是说,另一个答案仅在 needle 等于该值或直接包含在该值中时进行处理。因此,当您的问题中包含的测试用例needle = 'green field'时,另一种解决方案不起作用。

概括来说,您可以递归地检查该值是否包含 needle

from typing import Any
from typing import Dict
from typing import Iterable

def keys_containing_value(d: Dict, needle: Any):
def recursively_in(x: Any, n: Any):
if isinstance(x, str) and isinstance(n, str):
return n in x
if type(x) is type(n):
return x == n
if isinstance(x, Iterable) and not isinstance(x, str):
return any(recursively_in(item, n) for item in x)
return [k for k, v in d.items() if recursively_in(v, needle)]

以下是该函数如何使用您的数据和测试用例工作:

mydict = {
'romeo': 16,
'juliette': 16,
'zena': 'red',
'gabby': 'red',
'lauren': 'smart',
'betty': 'smart',
'kristen': 'sweet',
'lisa': 'sweet',
'lucy': ['smart', 'sweet'],
'shawna': 'green field',
'terry': 'the green field is on fire',
'dorothy': 'shelly plays on the green field',
'jenny': ['intelligent', 'cuts the smart green field grass'],
}
needles = [
16,
'red',
'smart',
'sweet',
'green field',
]

for needle in needles:
print(keys_containing_value(mydict, needle))

输出:

['romeo', 'juliette']
['zena', 'gabby']
['lauren', 'betty', 'lucy', 'jenny']
['kristen', 'lisa', 'lucy']
['shawna', 'terry', 'dorothy', 'jenny']

关于python - 当每个键有多个值时,根据值获取键列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50844106/

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