如何使用dict comprehensions和三元运算符在Python中创建一个新的dict

时间:2016-05-21 20:00:29

标签: python dictionary ternary-operator dictionary-comprehension

我想使用dict comprehensions和三元运算符来创建一个新的dict。这是一个MWE。

# Step 1: Create a dict, `d`
# {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i', 10: 'j'}
import string
d = {k : v for k, v in zip(range(1, 11), string.ascii_lowercase[:10])}

# Step 2: Use dict comprehensions and the ternary operator to get a new dict
new_dict = {k : v if k<5 else v : k for k, v in d.items()}

但遇到这个问题,

    new_dict = {k : v if k<5 else v : k for k, v in d.items()}
                                    ^
SyntaxError: invalid syntax

为什么SyntaxError会被抨击?如何解决?

2 个答案:

答案 0 :(得分:4)

key:value语法不是真正的表达式,因此您不能在其上使用三元运算符。您需要分别对键和值部分执行三元操作:

new_dict = {(k if k<5 else v) : (v if k<5 else k) for k, v in d.items()}

(我将测试更改为k<5而不是v<5,假设您要将数字键与5进行比较;将字符串值与5进行比较将无法在Python 3中使用并且无效结果在Python 2中。)

答案 1 :(得分:1)

这是正确的语法。

 $get_cats = "SELECT * FROM Rest_Category
                    INNER JOIN Rest_Details
                    ON Rest_Category.CategoryID = Rest_Details.Cat_ID
                    INNER JOIN Delivery_Pcode
                    ON Delivery_Pcode.Restaurant_ID = Rest_Details.Resturant_ID
                    WHERE Delivery_Pcode.Pcode= $searchq";