我有列表列表,我希望创建一个字典,每个元素的长度为值。我尝试了以下方法:
tmp = [['A', 'B', 'E'], ['B', 'E', 'F'], ['A', 'G']]
tab = []
for line in tmp:
tab.append(dict((k, len(tmp)) for k in line))
但它输出为:
[{'A': 3, 'B': 3, 'E': 3}, {'B': 3, 'E': 3, 'F': 3}, {'A': 3, 'G': 3}]
我应该为获得输出做出哪些修改:
{['A', 'B', 'E']:3, ['B', 'E', 'F']:3, ['A', 'G']:2}
提前致谢。
AP
答案 0 :(得分:3)
您不能将list
个对象用作字典键,它们是可变且不可删除的。您可以将它们转换为元组。另请注意,您正在遍历每个子列表。您只能通过循环遍历主列表来使用生成器表达式:
In [3]: dict((tuple(sub), len(sub)) for sub in tmp)
Out[3]: {('A', 'B', 'E'): 3, ('A', 'G'): 2, ('B', 'E', 'F'): 3}
答案 1 :(得分:1)
{tuple(t):len(t) for t in tmp}
输入:
[['A', 'B', 'E'], ['B', 'E', 'F'], ['A', 'G']]
输出:
{('A', 'G'): 2, ('A', 'B', 'E'): 3, ('B', 'E', 'F'): 3}
Dictionnary不接受列表作为键,但是元组