检查一个值是否存在于 Python 的字典列表中

目录

Check if a value exists in a List of Dictionaries in Python

  1. 检查一个值是否存在于 Python 的字典列表中
  2. 检查字典列表中是否不存在某个值
  3. 获取给定键的所有值的列表
  4. 使用 for 循环检查字典列表中是否存在值
  5. 获取列表中匹配字典的索引
  6. 使用过滤器检查字典列表中是否存在值
  7. 使用地图检查字典列表中是否存在值

检查一个值是否存在于 Python 的字典列表中

检查一个值是否存在于字典列表中:

  1. 使用生成器表达式迭代列表。
  2. 访问每个字典中的给定键并将其与值进行比较。
  3. 将结果传递给any()函数。
主程序
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] if any( dictionary.get('name') == 'bobby' for dictionary in list_of_dicts ): # 👇️ this runs print('A dictionary with the specified value exists')

第一个示例检查一个值是否存在于字典列表中。

第二个检查字典列表中是否不存在值。

我们使用生成器表达式来遍历列表。

生成器表达式用于对每个元素执行某些操作或选择满足条件的元素子集。
主程序
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] if any( dictionary['name'] == 'bobby' for dictionary in list_of_dicts ): # 👇️ this runs print('A dictionary with the specified value exists')

在每次迭代中,我们访问name键并将其值与特定字符串进行比较。

any函数接受一个可迭代对象作为参数,如果可迭代对象中的任何元素为真则返回。True

如果条件至少满足一次,则any()函数短路并返回True

检查一个值是否不存在于字典列表中

如果您需要检查某个值是否不存在于字典列表中,请否定对any().

主程序
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] if not any(dictionary.get('name') == 'bobby' for dictionary in list_of_dicts): print('None of the dictionaries contain the specified value')

运算not符翻转结果,因此if仅当该值不存在于列表中的任何字典中时才运行该块。

如果不是列表中的所有词典都包含给定的键,您可以使用该dict.get()方法来避免出现异常。 KeyError

如果键在字典中,则 dict.get 方法返回给定键的值,否则返回默认

该方法采用以下 2 个参数:

姓名 描述
钥匙 返回值的键
默认 如果字典中不存在提供的键,则返回默认值(可选)
default如果未提供参数值,则默认为None,因此该get()方法永远不会引发. KeyError

获取给定键的所有值的列表

如果您需要获取给定键的所有值的列表,请使用列表理解。

主程序
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] name_values = [ dictionary['name'] for dictionary in list_of_dicts ] print(name_values) # 👉️ ['alice', 'bobby', 'carl'] print('bobby' in name_values) # 👉️ True print('another' in name_values) # 👉️ False

我们使用
列表理解来遍历列表。

在每次迭代中,我们访问当前字典中的特定键并返回相应的值。

或者,您可以使用for 循环

for使用循环检查一个值是否存在于字典列表中

这是一个三步过程:

  1. 使用for循环遍历列表。
  2. 访问每个字典中的给定键并将其与值进行比较。
  3. 如果找到匹配的字典,则退出for循环。
主程序
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] value_exists = False for dictionary in list_of_dicts: if dictionary.get('name') == 'bobby': value_exists = True # 👇️ {'id': 2, 'name': 'bobby', 'salary': 101} print(dictionary) break

我们使用for循环遍历列表。

在每次迭代中,我们检查当前字典是否具有name具有特定值的键。

如果满足条件,我们将value_exists变量设置为True并退出for循环。

break语句跳出最内层的封闭for循环while

获取匹配字典在列表中的索引

如果需要获取列表中匹配字典的索引,请使用该
enumerate()函数。

主程序
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] value_exists = False for index, dictionary in enumerate(list_of_dicts): if dictionary.get('name') == 'bobby': value_exists = True # 👇️ {'id': 2, 'name': 'bobby', 'salary': 101} print(dictionary) print(index) # 👉️ 1 break

我们使用该enumerate()函数来访问当前迭代的索引。

enumerate函数接受一个可迭代对象并返回一个包含元组的枚举对象,其中第一个元素是索引,第二个元素是相应的项目

主程序
my_list = ['bobby', 'hadz', 'com'] for index, item in enumerate(my_list): print(index, item) # 👉️ 0 bobby, 1 hadz, 2 com

检查一个值是否存在于字典列表中使用filter

您还可以使用该filter()函数来检查某个值是否存在于字典列表中。

主程序
list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] matching_dicts = list( filter( lambda x: x.get('name') == 'bobby', list_of_dicts ) ) # [{'id': 2, 'name': 'bobby', 'salary': 101}] print(matching_dicts) if len(matching_dicts) > 0: print('The value exists in the list of dictionaries')

filter函数接受一个函数和一个可迭代对象作为参数,并从可迭代对象的元素构造一个迭代器,函数返回一个真值。

我们传递给的 lambda 函数filter()被列表中的每个字典调用。

该函数获取name字典的属性并将其与给定值进行比较。

如果满足条件,则字典包含在对象中filter

最后一步是检查变量的长度是否大于0

如果是,则至少有一本字典具有指定值。

检查一个值是否存在于字典列表中使用map

您还可以使用该map()函数来检查某个值是否存在于字典列表中。

主程序
from operator import itemgetter list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] if 'bobby' in map(itemgetter('name'), list_of_dicts): # 👇️ this runs print('The value is in the dictionary') else: print('The value is NOT in the dictionary')

map ()函数将一个函数和一个可迭代对象作为参数,并使用可迭代对象的每个项目调用该函数。

operator.itemgetter
类返回一个可调用对象,该对象在指定的索引或键

获取项目。

例如,x = itemgetter('name')然后调用x(my_dict),返回
my_dict['name']

主程序
from operator import itemgetter list_of_dicts = [ {'id': 1, 'name': 'alice', 'salary': 100}, {'id': 2, 'name': 'bobby', 'salary': 101}, {'id': 3, 'name': 'carl', 'salary': 102}, ] # 👇️ ['alice', 'bobby', 'carl'] print(list(map(itemgetter('name'), list_of_dicts)))

最后一步是使用in运算符检查给定值是否包含在列表中。

我还写了一篇关于
如何过滤字典列表的文章。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: