在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'
)
答案 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"
}