Python字典-单键、多值对

Python字典-单键、多值对,python,Python,这是一个单键多值对 我想将5和12分别分配给和' 期望输出 Dict= [('or', []), ('and', [5, 12]), ('with', [9])] 如何进行? 而且,我想让这个一般长度也可以大于2。您可以尝试以下方法: [('or', []), ('and', [5]), ('and',[12]), ('with', [9])] 我会选择一个很好的ol for循环。一份清单的理解会如此复杂,恐怕最终会让人无法理解 [('or', []), ('and', 5), ('and'

这是一个单键多值对

我想将
5
12
分别分配给
和'

期望输出

Dict= [('or', []), ('and', [5, 12]), ('with', [9])]
如何进行? 而且,我想让这个一般长度也可以大于2。

您可以尝试以下方法:

[('or', []), ('and', [5]), ('and',[12]), ('with', [9])]
我会选择一个很好的ol for循环。一份清单的理解会如此复杂,恐怕最终会让人无法理解

[('or', []), ('and', 5), ('and', 12), ('with', [9])]
产生:

data = [('or', []), ('and', [5, 12]), ('with', [9])]

res = []
for k, v in data:
    if len(v)>1:
        for r in v:
            res.append((k, [r]))
    else:
        res.append((k, v))
print(res)

在给出的答案中添加一些更有趣的内容: 如果你不在乎顺序,你可以这样做:

[('or', []), ('and', [5]), ('and', [12]), ('with', [9])]
你也可以把你的字典转换成一本真正的字典

transf_dict = [(x[0],y) for x in Dict for y in x[1]] + [(x[0],[])  for x in Dict if not x[1]]
我认为这会让东西更具可读性。例如:

newdict = dict(Dict)
将提供您所需的输出,但这一切都是以订购为代价的。如果您愿意稍微更改格式,请尝试:

transf_dict = []
for key,item in newdict.items():
    if not item:
        transf_dict.append((key,[]))
    else:
        transf_dict.extend([(key,[x]) for x in item])

这里没有字典。只有元组。你尝试了什么?那不是一个dict,它是一个元组列表。你可以把它分成一个for循环。你还坚持在单个项目列表中吗?那没有意义。为什么会有一个元组中的一个元组。你可以用口述,我同意。为了一行解决方案而采用一行解决方案很少是个好主意。@SethMMorton它不像:
[(a,el)在Dict中表示a,b在Dict中表示el在b中表示el或[b]]
是完全不可读的。。。不要认为这个列表可能很正确,但很容易调整…@JonClements这确实是非常可读和优雅的。。它产生的结果并不完全是OP想要的结果,但仍然令人满意。@JonClements,非常可读。我的评论并不是要被解读为“所有的一行程序都是坏的和不可读的”,而是要被解读为“人们经常要求/给出一行程序的解决方案,而这可能不是最好的解决方案。”我和下一个程序员一样喜欢一行程序,但就像辣酱一样,最好适度。@Ev.Kounis这是怎么不可读的?三元运算符的使用非常简单,嵌套列表也不太复杂。
transf_dict = []
for key,item in newdict.items():
    if not item:
        transf_dict.append((key,[]))
    else:
        transf_dict.extend([(key,[x]) for x in item])
transf_dict = [(x, lst) for x, y in Dict for lst in (y if y else [[]])]