Python程序从字典列表中提取具有给定键的字典


Python 中实现的一种数据结构,更常见地称为关联数组,是**字典**。字典由一组键值对组成。每个键值组合对应一个键及其相应的键值。

在本文中,我们将学习一个 Python 程序,用于从字典列表中提取具有给定键的字典。

使用的方法

以下是完成此任务的各种方法

  • 使用列表推导和 keys() 函数

  • 使用 filter() 和 lambda 函数

  • 使用 operator.countOf() 方法

示例

假设我们已经获取了一个包含字典的输入列表和一个输入键。我们现在将使用上述方法从包含给定输入键的列表中提取字典。

输入

inputList = [{'hello': 3, 'tutorialspoint': 6}, {'python': 9},
   {'users': 12, 'users': 15, 'hello': 18},
   {'users': 21}]
inputKey = 'users'      

输出

The resultant list of dictionaries containing the 'users' key −
[{'users': 15, 'hello': 18}, {'users': 21}]

在上述字典输入列表中,只有**{'users': 12, 'users': 15, 'hello': 18}, {'users': 21}** 字典包含输入键**users**。因此,这些字典是从输入列表中提取的。

使用列表推导和 keys() 函数

当您希望基于现有列表的值构建新列表时,列表推导提供了更短/简洁的语法。

**keys()** 函数(dict.keys() 方法提供了一个视图对象,该对象按插入顺序显示字典中所有键的列表)

算法(步骤)

以下是执行所需任务的算法/步骤。

  • 创建一个变量来存储**字典输入列表**。

  • 打印输入列表。

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

  • 使用列表推导遍历给定的字典列表,并使用 in 运算符检查键是否在字典的键中。

  • 如果为真,则将此字典存储在列表中。

  • 打印包含输入键的结果字典列表。

示例

以下程序使用列表推导和 keys() 函数从输入字典中返回包含输入键的字典列表。

# input list of dictionaries
inputList = [{'hello': 3, 'tutorialspoint': 6}, {'python': 9},
   {'users': 12, 'users': 15, 'hello': 18},
   {'users': 21}]
# printing input list
print("Input List:\n", inputList)
# input key
inputKey = 'users'
# Traversing in the given input list and checking 
# whether the input Key exists in the list of dictionaries keys
resultantDict = [e for e in inputList if inputKey in list(e.keys())]
# printing resultant list of dictionaries containing input key
print("The Resultant list of dictionaries containing the 'users' key:\n", resultantDict)

输出

Input List:
 [{'hello': 3, 'tutorialspoint': 6}, {'python': 9}, {'users': 15, 'hello': 18}, {'users': 21}]
The Resultant list of dictionaries containing the 'users' key:
 [{'users': 15, 'hello': 18}, {'users': 21}]

使用 filter() 和 lambda 函数

**filter() 函数** - 使用一个函数过滤指定的序列,该函数确定序列中的每个元素是真还是假。

lambda 函数

lambda 函数是一个小的匿名函数。

lambda 函数可以有无限/任意数量的参数,但只有一个表达式。

语法

lambda arguments : expression

示例

以下程序使用 filter() 和 lambda 函数从输入字典中返回包含输入键的字典列表。

# input list of dictionaries
inputList = [{'hello': 3, 'tutorialspoint': 6}, {'python': 9},
   {'users': 12, 'users': 15, 'hello': 18},
   {'users': 21}]
# printing input list
print("Input List:\n", inputList)
# input key
inputKey = 'users'
# Filtering all the dictionaries with the given input key
resultantDict = list(
    filter(lambda sub: inputKey in list(sub.keys()), inputList))
# printing the resultant list of dictionaries containing input key
print("Resultant list of dictionaries containing 'users' key:\n", resultantDict)

输出

执行后,上述程序将生成以下输出。

Input List:
 [{'hello': 3, 'tutorialspoint': 6}, {'python': 9}, {'users': 15, 'hello': 18}, {'users': 21}]
Resultant list of dictionaries containing 'users' key:
 [{'users': 15, 'hello': 18}, {'users': 21}]

使用 operator.countOf() 方法

operator 模块的 countOf() 函数返回**a**中等于**b**的元素数量。

语法

operator.countOf(a, b)

参数

  • a - 列表或字符串或任何其他数据类型。

  • b - 我们必须在“a”中计算出现次数的值

示例

以下程序使用列表推导和 keys() 函数从输入字典中返回包含输入键的字典列表。

import operator as op
# input list of dictionaries
inputList = [{'hello': 3, 'tutorialspoint': 6}, {'python': 9},
   {'users': 12, 'users': 15, 'hello': 18},
   {'users': 21}]
# printing input list
print("Input List:\n", inputList)
# input key
inputKey = 'users'
# Traversing in the given input list and checking
# whether the input Key exists in the list of dictionaries keys
resultantDict = [e for e in inputList if op.countOf(
    list(e.keys()), inputKey) > 0]
# printing resultant list of dictionaries containing input key
print("The Resultant list of dictionaries containing the 'users' key:\n", resultantDict)

输出

执行后,上述程序将生成以下输出。

Input List:
 [{'hello': 3, 'tutorialspoint': 6}, {'python': 9}, {'users': 15, 'hello': 18}, {'users': 21}]
The Resultant list of dictionaries containing the 'users' key:
 [{'users': 15, 'hello': 18}, {'users': 21}]

结论

在本文中,我们学习了如何使用三种不同的技术从字典列表中检索具有特定键的字典。学习了新方法。使用 operator.countOf() 统计可迭代对象的元素。为了确定元素是否存在,可以使用新方法代替“in”和“not in”运算符。

更新于: 2023年8月18日

115 次查看

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告