在python表达式中对子表达式使用别名

2024-10-01 02:29:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以在另一个表达式中临时为表达式别名吗?比如说,SQL中可能存在这种情况,其中表达式可能非常长,但我不熟悉用Python实现这一点的方法。我并不真正关心我是否应该这样做,我更好奇的是在Python语法中是否可以这样做

dict_a = {'p1c1': [0, 520],
 'p1c2': [400, 740],
 'p1c3': [600, 800],
 'p1c4': [600, 800],
 'p1c5': [660, 960],
 'p1c6': [760, 1200],
 'p2c1': [400, 900],
 'p2c2': [600, 920],
 'p2c3': [700, 1040],
 'p2c4': [700, 1040],
 'p2c5': [780, 1060],
 'p2c6': [800, 1160],
 'p3c1': [800, 1400],
 'p3c2': [1150, 1450],
 'p3c3': [1220, 1600],
 'p3c4': [1220, 1600],
 'p3c5': [1350, 1800],
 'p3c6': [1580, 2000]}

原文:

dict_b = [dict_a[key][1] - dict_a[key][0] for key in dict_a.keys()]

期望的:

dict_b = [(r[1] - r[0]) with dict_a[key] as r for key in dict_a.keys()]

或者类似的东西


Tags: 方法keyinforsql表达式语法情况
3条回答

对于您的特定用例,您可以使用.values()而不是.keys()

dict_b = [r[1] - r[0] for r in dict_a.values()]

如果同时需要键和值,请使用.items()。在其他上下文中,Python通常具有方便的函数,允许类似的事情,例如enumerate()对序列的索引和值进行迭代

在没有这种快捷方式的情况下,只需使用一个规则的for循环,就可以分配中间变量。下面是如何将列表理解重写为一个循环

for key in dict_a:
    r = dict_a[key]
    dict_b.append(r[1] - r[0])

你不需要。您只能使用键来获取值,但可以直接对值进行迭代

dict_b = [v[1] - v[0] for v in dict_a.values()]

如果您确实需要这些键,那么您可以依次迭代这两个键

dict_b = {k: v[1] - v[0] for k, v in dict_a.items()}

我知道实现这一点的唯一方法是在Python 3.8+中使用walrus操作符。这不完全是你要找的,但很相似

dict_b = [r[1] - r[0] for key in dict_a.keys() if (r := dict_a.get(key))]

相关问题 更多 >