Python 程序检查任何键是否具有所有给定的列表元素

pythonserver side programmingprogramming更新于 2023/12/28 23:14:00

用方括号括起来的逗号分隔值(项)的数组(列表)是 Python 中最灵活的数据类型之一。列表的元素不必是同一类型,这一点很重要。

在本文中,我们将学习一个 Python 程序来检查任何键是否具有所有给定的列表元素。

示例

假设我们已采用输入字典和列表。现在,我们将使用上述方法检查输入字典的任何键的值是否包含给定的列表元素。

输入

inputDict = {'hello': [4, 2, 8, 1],
			'tutorialspoint': [5, 12, 10, 6],
			'python': [9, 3, 7, 1],
			'users': [3, 6, 1, 8, 2]}
inputList = [1, 2, 3]

输出

Do the values of any key have given list elements?: True

在上述字典中,只有 'users' 键包含所有输入列表元素 1、2、3 的值。因此结果为 True

算法(步骤)

以下是执行所需任务需要遵循的算法/步骤

  • 创建一个变量来存储输入字典并打印它。

  • 创建另一个变量来存储输入列表。

  • 将结果初始化为 False。

  • 使用 for 循环遍历输入字典的键。

  • 使用 if 条件语句检查当前键的对应值是否存在于使用 issuperset() 函数的输入列表中。

  • 将结果更新为如果条件为真,则返回 True。

  • 打印结果。

示例 1:使用 for 循环和 issuperset() 函数

issuperset() 函数(如果给定集合中的所有元素都存在于原始集合中,则返回 True;否则,返回 False)

以下程序使用 for 循环和 issuperset() 函数检查输入字典的任何键的值是否包含给定的列表元素 –

# 输入字典
inputDict = {'hello': [4, 2, 8, 1],
        'tutorialspoint': [5, 12, 10, 6],
        'python': [9, 3, 7, 1],
        'users': [3, 6, 1, 8, 2]}
# 打印输入字典
print("Input dictionary:\n", inputDict)
# 输入列表
inputList = [1, 2, 3]
# 将结果初始化为 False
result = False
# 遍历输入字典的键
for k in inputDict:
    # 使用 issuperset() 函数检查当前键的对应值是否
    # 存在于输入列表中
    if set(inputDict[k]).issuperset(inputList):
        # 如果条件为真,则将结果更新为 True
        result = True
# 打印结果
print("任何键的值是否具有给定的列表元素?:", result)

输出

输入字典:
{'hello': [4, 2, 8, 1], 'tutorialspoint': [5, 12, 10, 6], 'python': [9, 3, 7, 1], 'users': [3, 6, 1, 8, 2]}
任何键的值是否具有给定的列表元素?:True

示例 2:使用 any() 和 issuperset() 函数

any() 函数:如果可迭代对象中的任何项为 True,则返回 True,否则返回 False。

以下程序使用 any() 和 issuperset() 函数检查输入字典中任何键的值是否包含给定的列表元素–

# 输入词典
inputDict = {'hello': [4, 2, 8, 1],
			'tutorialspoint': [5, 12, 10, 6],
			'python': [9, 3, 7, 1],
			'users': [3, 6, 1, 8, 2]}
# 打印输入字典
print("输入字典:\n", inputDict)
# 输入列表
inputList = [1, 2, 3]
# 检查键是否包含所有列表元素
result = any(set(val).issuperset(inputList)
		for val in inputDict.values())
# 打印结果
print("任何键的值是否具有给定的列表元素?:", result)

输出

输入字典:
{'hello': [4, 2, 8, 1], 'tutorialspoint': [5, 12, 10, 6], 'python': [9, 3, 7, 1], 'users': [3, 6, 1, 8, 2]}
任何键的值是否具有给定的列表元素?:True

示例 3:不使用 issuperset() 函数

以下程序检查输入字典的任何键的值是否包含给定的列表元素,而不使用 issuperset() 函数

# 创建一个函数来检查键是否包含所有列表元素
# 通过接受字典值,输入列表作为参数
def containsListElements(a,b):
	cnt =0
	for k in b:
		if k in a:
			cnt+=1
	if(cnt==len(b)):
		return True
	return False
# 输入字典
inputDict = {'hello': [4, 2, 8, 1],
			'tutorialspoint': [5, 12, 10, 6],
			'python': [9, 3, 7, 1],
			'users': [3, 6, 1, 8, 2]}

# 输入列表
inputList = [1, 2, 3]
# 将结果初始化为 False
result = False
# 遍历输入字典的键
for k in inputDict.keys():
    # 调用上面定义的 contains() 函数
	if(containsListElements(inputDict[k],inputList)):
        # 如果条件为真,则将结果更新为 True
        result=True
        # 中断循环
		break
# 打印结果
print("任何键的值是否具有给定的列表元素?:", result)

输出

任何键的值是否具有给定的列表元素?:True

示例 4:使用递归

以下程序使用递归检查输入字典的任何键的值是否包含给定的列表元素

def containsListElements(a, b, result):
    if len(b) == 0:
        return result
    if b[0] in a:
        return containsListElements(a, b[1:], True)
    else:
        return containsListElements(a, b[1:], False)

def recursiveFunc(inputDict, inputList, result):
    # 如果输入字典的长度为 0,则直接返回结果
    if len(inputDict) == 0:
    	return result
    # 从给定字典中删除键值
    key, val = inputDict.popitem()
    if containsListElements(val, inputList, False):
        # 如果条件为真,则将结果更新为 True
        result = True
    # 递归逻辑
    return recursiveFunc(inputDict, inputList, result)

# 输入字典
inputDict = {'hello': [4, 2, 8, 1],
'tutorialspoint': [5, 12, 10, 6],
'python': [9, 3, 7, 1],
'users': [3, 6, 1, 8, 2]}

# 输入列表
inputList = [1, 2, 3]

result = recursiveFunc(inputDict, inputList, False)
# 打印结果
print("任何键的值是否具有给定的列表元素?:", result)

输出

任何键的值是否具有给定的列表元素?:True

结论

在本文中,我们学习了 4 种不同的方法来检查任何键是否具有所有给定的列表元素。此外,我们还学习了如何使用 pop() 函数从字典中删除键值对。


相关文章