在Python中获取字典键作为列表2025年1月5日 | 15 分钟阅读 在 Python 中,字典是多功能数据结构,可以高效存储和检索键值对。有时,您可能需要仅从字典中提取键并将它们存储在列表中以用于各种目的,例如遍历它们或仅对键执行操作。Python 通过内置方法提供了一种简单而优雅的方法来实现这一点。 要将字典的键作为列表获取,您可以使用 `keys()` 方法。此方法返回一个视图对象,该对象显示字典中所有键的列表。通过将此视图对象传递给 `list()` 构造函数,您可以获取包含字典所有键的列表。 方法 1:使用 dict.keys() 获取字典键作为列表任何可迭代对象都可以作为参数发送到 Python 的 `list()` 方法,该方法会生成一个列表。在 Python 中,任何可以遍历的对象都称为可迭代对象。 代码 输出 代码解释 此 Python 代码创建一个名为 `mydict` 的字典,其中包含整数键和字符串值。以下是每行代码的作用: - `mydict = {1: 'she', 2: 'had', 3: 'dinner'}`:此行初始化一个名为 `mydict` 的字典,其中包含三个键值对。键是整数(1、2 和 3),对应的值是字符串('she'、'had' 和 'dinner')。
- `keysList = list(mydict.keys())`:此行使用 `keys()` 方法从字典 `mydict` 中检索键,使用 `list()` 函数将它们转换为列表,并将生成的列表分配给变量 `keysList`。此操作提取字典中的所有键并将它们存储在列表中。
- `print(keysList)`:最后,此行打印存储在变量 `keysList` 中的键列表。这将输出 `[1, 2, 3]`,即字典 `mydict` 的键。
- 因此,此代码的总体目的是从字典中提取键并将其作为列表打印。
- 该代码的时间复杂度为 O(n),其中 n 是字典中键的总数。
- 字典中键的数量由变量 n 表示,程序的空间复杂度为 O(n)。这是因为当软件构造一个与字典键数量相同的完全独立的列表对象时,需要额外的内存。
方法 2:使用 For 循环和 Append 方法获取字典键作为列表利用 `dict.keys()` 函数,我们将继续以这种方式遍历每个键并将其附加到一个名为 list 的新列表中。 代码 输出 代码解释 此 Python 代码定义了一个函数 `getList(dict)`,该函数接受一个字典 (dict) 作为输入,并返回一个包含字典键的列表。 以下是代码的分解说明: - `def getList(dict):` 此行定义了一个名为 `getList` 的函数,该函数接受一个参数 `dict`,预期为一个字典。
- `list = []:` 此行初始化一个名为 `list` 的空列表(请注意,使用 `list` 作为变量名不推荐,因为它会遮蔽内置的 `list` 类型)。
- `for key in dict.keys():` 此行遍历字典 `dict` 中的所有键。
- `append(key):` 在循环内部,字典中的每个键都使用 `append()` 方法附加到列表中。
- `return list:` 遍历所有键后,该函数返回包含输入字典所有键的列表。
- `dict = {1: 'she', 2: 'had', 3: 'dinner'}:` 此行创建了一个名为 `dict` 的字典,其键为 1、2 和 3,对应的值分别为 'she'、'had' 和 'dinner'。
- `print(getList(dict)):` 此行调用 `getList()` 函数,将 `dict` 字典作为参数,并打印结果。结果将是一个包含字典键的列表,在本例中为 `[1, 2, 3]`。
- 时间复杂度为 O(n),空间复杂度为 O(n)
方法 3:使用列表推导将字典键转换为列表代码 输出 代码解释 此代码演示了如何在 Python 中创建包含字典键的列表。让我们逐步分解它: - `dict = {1: 'she', 2: 'had', 3: 'dinner'}`:此行创建一个名为 `dict` 的字典,其中包含三个键值对。键是整数(1、2、3),对应的值是字符串('she'、'had'、'dinner')。
- `keysList = [key for key in dict]`:此行创建一个名为 `keysList` 的新列表。它使用列表推导遍历字典 `dict` 的键。在每次迭代期间,键都被添加到列表中。本质上,它从字典中提取所有键并将它们存储在列表中。
- `print(keysList)`:此行将列表 `keysList` 打印到控制台。
- 运行此代码时,它将输出:`[1, 2, 3]`
- 这是因为键 1、2 和 3 从字典 `dict` 中提取并存储在列表 `keysList` 中,然后打印该列表。
- 当 n 是字典中键和值的总量时,时间复杂度为 O(n)。
- 为了存储字典中的键和值,请使用 O(n) 的额外空间。
方法 4:使用 * 解包将字典键转换为列表任何可迭代对象都可以用 * 解包,由于字典键是可迭代的,将它们放在一个名义列表中可以轻松生成一个列表。 代码 输出 代码解释 此 Python 代码定义了一个函数 `getList(dict)`,该函数接受一个字典作为输入,并返回一个包含该字典键的列表。 以下是代码的分解说明: - `def getList(dict):` 此行定义了一个名为 `getList` 的函数,该函数接受一个参数 `dict`,预期为一个字典。
- `return [*dict]:` 此行返回一个包含输入字典键的列表。`[*dict]` 语法是一种将字典的键解包到列表中的方式。因此,此行有效地返回字典中所有键的列表。
- `dict = {'a': 'she', 'b': 'had', 'c': 'dinner'}:` 此行创建一个名为 `dict` 的字典,其中包含三个键值对。
- `print(getList(dict)):` 此行调用 `getList` 函数,将字典 `dict` 作为参数,并打印结果。它将打印一个包含字典键的列表,这些键是 'a'、'b' 和 'c'。因此,输出将是 `['a', 'b', 'c']`。
- 总的来说,该代码演示了如何使用一个简单的函数从字典中提取键并将其存储在列表中。
- 时间复杂度为 O(n),空间复杂度为 O(n)
方法 5:使用 itemgetter 将字典键转换为列表`operator` 模块中的 `itemgetter` 返回一个可撤销对象,该对象使用操作数的 `__getitem__()` 函数检索项。将此函数映射到 `dict.items()` 后,下一步是将其转换为列表。 代码 输出 代码解释 此 Python 代码定义了一个名为 `getList` 的函数,然后创建一个名为 `dict` 的字典。让我们逐步分解代码: - 导入语句: 代码从 `operator` 模块导入 `itemgetter` 函数。`itemgetter` 是一个函数,它构造一个可调用对象,该对象将可迭代对象(如列表或字典)作为输入,并检索指定索引处的项。
- `getList` 函数
- `getList` 函数接受一个字典 (`dict`) 作为输入。
- 在函数内部,`map` 函数用于将 `itemgetter(0)` 函数应用于字典中的每个项(键值对)。
- `itemgetter(0)` 函数从字典中的每个键值对中检索键。
- `map` 函数返回一个迭代器,然后使用 `list` 函数将其转换为列表。此列表包含字典中的所有键。
- 字典创建
- 代码初始化一个名为 `dict` 的字典,其中包含三个键值对。键是 'a'、'b' 和 'c',对应的值分别为 'she'、'had' 和 'dinner'。
- 打印结果: 调用 `getList` 函数,并将字典 `dict` 作为参数。打印 `getList` 函数返回的列表。
- 输出: 代码的输出将是一个包含字典 `dict` 中所有键的列表。在本例中,输出将是 `['a', 'b', 'c']`。这是因为 `itemgetter(0)` 检索键,而键是 'a'、'b' 和 'c'。
方法 6:使用 Map 和 Lambdalambda 函数和 `map()` 函数可以一起用作从列表中获取字典键的另一种方法。 以下是如何完成的示例: 代码 输出 代码解释 此 Python 代码定义了一个名为 `get_keys_as_list` 的函数,该函数接受一个字典作为输入,并返回一个包含字典所有键的列表。 让我们分解一下代码: - `def get_keys_as_list(dictionary):` `return list(map(lambda x: x[0], dictionary.items()))`
以下是各部分的作用: - `def get_keys_as_list(dictionary):` 此行定义了一个名为 `get_keys_as_list` 的函数,该函数接受一个参数 `dictionary`,预期为一个 Python 字典。
- `items():` 此方法返回一个视图对象,该对象显示字典的键值元组对的列表。
- `lambda x: x[0]:` 这是一个匿名函数 (lambda 函数),它接受一个参数 (x) 并返回 x 的第一个元素 (x[0])。在这种情况下,x 是一个表示字典中的键值对的元组。
- `map(lambda x: x[0], dictionary.items()):` `map()` 函数将给定函数 (`lambda x: x[0]`) 应用于可迭代对象 (`dictionary.items()`) 的每个项。在这种情况下,它将函数应用于每个键值对并提取键(每个元组的第一个元素)。
- `list(...):` 这会将 `map()` 函数的结果(一个可迭代对象)转换为列表。
- `dictionary = {1: 'she', 2: 'had', 3: 'dinner'}`
- `print(get_keys_as_list(dictionary))`,这部分创建一个名为 `dictionary` 的字典,其中包含整数键和字符串值。
- 然后它调用 `get_keys_as_list()` 函数,将 `dictionary` 作为参数并打印结果。
- 因此,当您运行代码时,它将输出一个包含字典 `{1: 'she', 2: 'had', 3: 'dinner'}` 所有键的列表,即 `[1, 2, 3]`。
- 此方法使用 `map` 函数,将 lambda 函数应用于字典中的每个条目,该 lambda 函数从字典中的每个条目中检索键。然后通过将生成的迭代器对象传递给 `list()` 方法来创建键的列表。
- 当 n 是字典中键的最大数量时,此方法的时间复杂度为 O(n),其辅助空间复杂度也为 O(n)。以清晰有效的方法获取字典键作为列表。
在 Python 中将字典键作为列表获取的一些优点在 Python 中将字典键作为列表获取具有以下几个优点: 1. 迭代和访问:当您将字典键转换为列表时,您可以通过循环(例如 for 循环或列表推导)遍历它们。这允许您对每个键单独执行操作,或者使用它们在列表中的索引访问特定键。 2. 排序(如果使用 Python 3.7+):从 Python 3.7 开始,字典会维护插入顺序。将字典键转换为列表允许您保留此顺序,从而使您能够按照键添加到字典的顺序处理它们。 3. 灵活性:一旦键在列表中,您就可以利用 Python 列表操作提供的广泛功能。例如,您可以按字母顺序或根据自定义条件对键进行排序,根据特定条件过滤它们,或根据需要执行任何其他列表操作。 4. 兼容性:在函数或操作期望以列表而不是字典形式输入的情况下,将键转换为列表有助于兼容性。这使您无需每次与此类函数或操作交互时都将键转换为列表。 5. 内存效率:虽然字典针对快速查找进行了优化,但列表对于某些操作可能更具内存效率或更快,尤其是在处理较小数据集时。通过将键转换为列表,您可以利用列表特定的操作,这些操作可能更适合您的特定用例。 6. 关注点分离:将键与字典分离可以增强代码的模块化和可读性。通过明确声明您正在使用键,它使您的代码更具自解释性,从而提高了代码的可维护性和可理解性。 7. 性能:根据上下文,从列表中访问键可能比直接从字典中访问键提供更好的性能,特别是如果您按顺序对键执行多个操作。这可以在某些情况下提高整体性能,尤其是在处理大型数据集或对性能敏感的应用程序时。 通过利用这些优点,您可以有效地利用在 Python 中将字典键转换为列表所提供的灵活性和功能,使您能够高效地对键本身执行各种操作。 在 Python 中将字典键作为列表获取的一些缺点虽然在许多情况下使用 `dictionary.keys()` 将键作为列表获取很方便,但也有一些缺点需要考虑: - 内存使用: Python 字典已经是内存密集型数据结构,将其键转换为列表会消耗额外的内存。对于大型字典,这种额外的内存消耗可能很大,尤其是在内存受限的环境中,例如嵌入式系统或处理大型数据集时。
- 性能开销: 生成字典键列表涉及遍历字典中的所有键并创建一个新的列表对象。与直接使用字典迭代器或生成器表达式遍历键相比,此过程会产生性能开销,特别是对于大型字典。
- 不内存高效: 如果您只需要遍历键一次,将它们转换为列表并不是内存高效的,因为它会创建需要存储在内存中的额外数据结构。在这种情况下,使用迭代器或生成器表达式一次处理一个键而无需具体化整个列表可能更内存高效。
- 键过时的可能性: 当您将字典的键作为列表获取时,该列表会与字典本身分离。如果字典在获取键列表后发生更改(例如,添加、删除或修改键),则该列表可能会过时。如果以后使用过时的键列表而未更新以反映字典中的更改,则可能导致意外行为或错误。
- 不适用于大型字典: 由于内存使用和性能方面的考虑,将字典键转换为列表对于非常大的字典可能效率低下。在这种情况下,通常最好使用迭代器或生成器表达式一次处理一个键,而无需在内存中具体化整个列表。
- 字典属性的丢失: 当您将字典键转换为列表时,您会丢失字典的一些固有属性,例如快速键查找、键唯一性和键值关联。如果您需要保留这些属性以进行进一步处理或依赖字典特定操作,这可能不是可取的。
- 维护开销: 管理与原始字典一起的额外键列表会引入维护开销。您需要确保键列表与字典中的实际键之间的一致性,特别是当字典经常发生更改时。这会使代码复杂化,并增加与键列表和字典之间的同步问题相关的错误风险。
在许多情况下,与将键转换为列表相比,使用字典视图(`dictionary.keys()`、`dictionary.values()` 和 `dictionary.items()`)或直接遍历字典可能更内存高效且性能更高。但是,选择取决于您的应用程序的具体要求和限制。 在 Python 中将字典键作为列表获取的一些应用在 Python 中,将字典键作为列表获取在各种场景中都非常有用。以下是一些常见的应用: 1. 遍历键: 如果要遍历字典的键,可以将其转换为列表,然后遍历该列表。当您需要专门对键执行操作时,这会很有帮助。 - 有时,您可能需要遍历字典的键以执行特定于每个键的操作。
- 将键转换为列表允许您使用循环或其他迭代方法遍历它们。
- 当您需要单独处理每个键时,例如执行计算或访问相应的值时,这会很有帮助。
2. 检查键是否存在: 您可能需要检查字典中是否存在特定键。将键转换为列表允许您使用列表方法进行此类检查。 - 在对字典执行操作之前,通常需要检查其中是否存在特定键。
- 通过将键转换为列表,您可以利用 `in` 等列表方法高效地检查键是否存在。
- 当处理字典中键的存在或不存在时,此方法可以使代码清晰简洁。
3. 排序键: 如果您需要按排序顺序处理字典键,将它们转换为列表然后对列表进行排序会很有用。 - Python 中的字典不维护顺序,但有时您可能需要按特定顺序(例如字母或数字)处理键。
- 将键转换为列表然后对该列表进行排序提供了一种实现此目的的直接方法。
- 当您需要以特定顺序显示或进一步处理键时,这特别有用。
4. 将键传递给函数: 有时您可能需要将字典的键传递给期望列表的函数。 - 在某些情况下,您可能需要将字典的键传递给期望列表的函数。
- 通过将字典键转换为列表,您可以轻松地将它们作为参数传递给此类函数。
- 这允许字典与旨在处理列表的函数更好地集成。
5. 提取唯一键: 如果要从字典中提取唯一键,将它们转换为列表然后将列表转换为集合会很有帮助。 - Python 中的字典可能包含重复键,但有时您可能只需要处理唯一键。
- 将字典键转换为列表,然后将该列表转换为集合有助于高效地提取唯一键。
- 当您需要执行不需要重复键或需要消除重复键的操作时,此方法很有用。
总而言之,在 Python 中将字典键转换为列表在各种编程场景中提供了多功能性和易操作性,从迭代和排序到检查存在和提取唯一元素。了解这些应用可以帮助您在使用字典时编写更高效、更有条理的 Python 代码。 这些只是几个示例,但在许多其他情况下,将字典键转换为列表可以简化或增强您的 Python 代码。 结论总之,在 Python 中将字典键作为列表获取的能力为各种编程任务提供了极大的灵活性和实用性。通过将字典键转换为列表,开发人员可以访问一系列功能,从而提高代码的可读性、效率和多功能性。 此方法有助于执行诸如遍历键、检查键是否存在、排序键、将键传递给函数以及提取唯一键等操作。无论是处理单个键、确保键的存在、强制特定顺序、将字典与函数集成还是处理唯一键,将字典键转换为列表都可以简化编码过程并实现更清晰简洁的代码。
|