如何将字典金额格式化的嵌套循环改写为字典推导式?
嵌套字典金额格式化的单行字典推导式写法
原始数据与需求
我们有一个包含客户分类的嵌套字典:
ddd = {'category 1:': {'A': 50.5, 'B': 28.9, 'C': 46.3, 'D': 513.8}, 'category 2:': {'E': 20.5, 'C': 48.1}, 'category 3:': {'D': 28.2, 'F': 68.3}}
需要将子字典中所有代表美元金额的数字,转换为带两位小数的美元格式字符串(例如'A': 50.5变为'A': '$50.50'),最终得到如下格式的字典:
{'category 1:': {'A': '$50.50', 'B': '$28.90', 'C': '$46.30', 'D': '$513.80'}, 'category 2:': {'E': '$20.50', 'C': '$48.10'}, 'category 3:': {'D': '$28.20', 'F': '$68.30'}}
已有可行方案(嵌套循环)
以下嵌套循环代码可以实现需求:
for a,b in ddd.items(): for i,j in b.items(): b[i] = "$" + "{0:,.2f}".format(j)
错误的推导式尝试
尝试将嵌套循环改写为单行字典推导式时,以下写法无法正常运行:
{a:b for i,("$" + "{0:,.2f}".format(j)) in b.items() for a,b in ddd.items()}
正确的单行字典推导式写法
需要使用嵌套字典推导式,外层处理主字典的分类键值对,内层处理每个分类下的客户金额格式化:
ddd_formatted = {category: {client: f"${amount:,.2f}" for client, amount in clients.items()} for category, clients in ddd.items()}
如果偏好使用format方法而非f-string,也可以写成:
ddd_formatted = {category: {client: "$" + "{0:,.2f}".format(amount) for client, amount in clients.items()} for category, clients in ddd.items()}
执行后即可得到符合要求的格式化嵌套字典。
内容的提问来源于stack exchange,提问作者Bear Bear
相关产品推荐
相关产品推荐

