使用if条件在Python中创建键/值对

时间:2016-03-12 20:16:17

标签: python python-3.x dictionary

在Python 3.5中,是否可以使用if语句构建字典键/值对?

例如,给定以下if-conditional

if x == 1:
    color = 'blue'
elif x == 2:
    color = 'red'
else:
    color = 'purple'

如何创建包含此if-conditional的词典键/值对?

dict(
    number = 3,
    foo = 'bar',
    color = 'blue' if x == 1, 'red' if x == 2, else 'purple'
)

3 个答案:

答案 0 :(得分:4)

密钥必须是不可变的(发音为:" hash-able")对象。这意味着字符串,元组,整数,浮点或具有__hash__方法的任何对象。你正在创建的词典似乎需要这个:

x = 2
d1 = {
    "number": 3,
    "foo": "bar",
    "color": "blue" if x == 1 else "red" if x == 2 else "purple"
}
# or:
x = 3
d2 = dict(
    number=3,
    foo="bar",
    color="blue" if x == 1 else "red" if x == 2 else "purple"
)
print(d1["color"]) # => red
print(d2["color"]) # => purple

正如@timgeb mentioed一样,更普遍的首选方法是使用dict.get方法,因为if-conditional语句变得越来越不可读。

答案 1 :(得分:3)

我建议不要使用条件,而是使用数字到颜色的映射。

>>> x = 2
>>> dict(
...     number = 3,
...     foo = 'bar',
...     color = {1: 'blue', 2: 'red'}.get(x, 'purple')
... )
{'color': 'red', 'foo': 'bar', 'number': 3}

如果您使用了数字 - >多次颜色映射,在外部定义并为其指定名称。

如果在字典中找不到x,则'purple'将返回后备值get

答案 2 :(得分:2)

一点点补充。使用if条件的Solution对于某些格式可能看起来更好(特别是如果你有很多条件):

x = 3
d1 = {
    "number": 3,
    "foo": "bar",
    "color": 
        "blue" if x == 1 else 
        "red" if x == 2 else 
        "purple"
}