条件字典显式初始化

时间:2014-11-29 21:34:28

标签: python dictionary

我需要根据给定元组中元素的数量将字典添加到列表中。这个想法如下:

# t is tuple containing 1 or 2 elements, l is list
l = list()
l.append({
    'A': t[0],
    if len(t) > 1: ('B': t[1])
})

所以,如果t = [7, 8]然后是l = [{'A': 7, 'B': 8}],如果是t = [7]那么l = [{'A': 7}]

我该如何做到这一点?

4 个答案:

答案 0 :(得分:2)

您可以使用if声明。

d = { 'A':t[0] }
if len(t) > 1:
     d['B'] = t[1]
l = [d]

或者你可以使用理解:

l = [ { chr(ord('A')+i):v for i,v in enumerate(t) } ]

如果你的元组长度在0到26之间,那将会有效。(之后你的字母用完了。)

答案 1 :(得分:2)

或者,您可以编写以下行来创建字典:

[dict(zip(['A', 'B'], t))]

然后是t = [7, 8]

>>> [dict(zip(['A', 'B'], t))]
[{'A': 7, 'B': 8}]

如果t = [7]

>>> [dict(zip(['A', 'B'], t))]
[{'A': 7}]

函数zip创建来自t的元组和仅包含最短列表长度的字母列表。 dict将元组映射到字典键/值。

答案 2 :(得分:1)

你的条件表达式应该这样写:

l.append({'A': t[0], 'B': t[1]} if len(t) > 1 else {'A': t[0]})

如果元组有多个项目,那么我们将{'A': t[0], 'B': t[1]}添加到列表中。否则,我们会添加{'A': t[0]}


或者,您可以将dict(zip('AB', t))添加到列表中:

l.append(dict(zip('AB', t)))

这适用于任何一种情况:

>>> t = (1, 2)
>>> dict(zip('AB', t))
{'A': 1, 'B': 2}
>>> t = (1,)
>>> dict(zip('AB', t))
{'A': 1}
>>>

答案 3 :(得分:1)

由于zip函数在两封电子邮件中的最短时间内停止,我喜欢选项:

l.append({key:value for key, value in zip(['A', 'B'], t)})