本篇我们将会介绍如何利用字典推导式(dictionary comprehension)对字典元素进行变换和过滤。
字典推导式可以针对字典执行一个 for 循环,对每个元素执行某些操作(例如变换或者过滤),然后返回一个新的字典。
与 for 循环不同,字典推导式提供了一个更具表达能力和简洁性的语法。以下是字典推导式的基本语法:
{key:value for (key,value) in dict.items() if condition}
字典推导式的返回结果是一个新的字典,元素由表达式 key: value 指定。
下面我们通过两个示例来了解一下字典推导式的应用。
字典 stocks 包含了股票代码和价格:
stocks = { 'AAPL': 121, 'AMZN': 3380, 'MSFT': 219, 'BIIB': 280, 'QDEL': 266, 'LVGO': 144 }
以下代码将每个股票的价格都增加了 2%:
stocks = { 'AAPL': 121, 'AMZN': 3380, 'MSFT': 219, 'BIIB': 280, 'QDEL': 266, 'LVGO': 144 } new_stocks = {} for symbol, price in stocks.items(): new_stocks[symbol] = price*1.02 print(new_stocks)
输出结果如下:
{'AAPL': 123.42, 'AMZN': 3447.6, 'MSFT': 223.38, 'BIIB': 285.6, 'QDEL': 271.32, 'LVGO': 146.88}
以上代码的执行过程如下:
以下示例使用字典推导式实现了相同的结果:
stocks = { 'AAPL': 121, 'AMZN': 3380, 'MSFT': 219, 'BIIB': 280, 'QDEL': 266, 'LVGO': 144 } new_stocks = {symbol: price * 1.02 for (symbol, price) in stocks.items()} print(new_stocks)
下面的 for 循环和字典推导式等价:
# for 循环 new_stocks = {} for symbol, price in stocks.items(): new_stocks[symbol] = price*1.02 # 字典推导式 new_stocks = {symbol: price * 1.02 for (symbol, price) in stocks.items()}
以下 for 循环用于返回价格大于 200 的股票:
stocks = { 'AAPL': 121, 'AMZN': 3380, 'MSFT': 219, 'BIIB': 280, 'QDEL': 266, 'LVGO': 144 } selected_stocks = {} for symbol, price in stocks.items(): if price > 200: selected_stocks[symbol] = price print(selected_stocks)
以上代码的执行过程如下:
以下示例使用字典推导式实现了相同的结果:
stocks = { 'AAPL': 121, 'AMZN': 3380, 'MSFT': 219, 'BIIB': 280, 'QDEL': 266, 'LVGO': 144 } selected_stocks = {s: p for (s, p) in stocks.items() if p > 200} print(selected_stocks)
下面的 for 循环和字典推导式等价:
# for 循环 selected_stocks = {} for symbol, price in stocks.items(): if price > 200: selected_stocks[symbol] = price # 字典推导式 selected_stocks = {s: p for (s, p) in stocks.items() if p > 200}