我需要根据给定元组中元素的数量将字典添加到列表中。这个想法如下:
# 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}]
。
我该如何做到这一点?
答案 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)})