Python 将元组列表转换为字典
我有一个包含三个元素的元组列表:Python 将元组列表转换为字典,python,dictionary,tuples,Python,Dictionary,Tuples,我有一个包含三个元素的元组列表: A = [[(72, 1, 2), (96, 1, 4)], [(72, 2, 1), (80, 2, 4)], [], [(96, 4, 1), (80, 4, 2), (70, 4, 5)], [(70, 5, 4)], ] 我需要将它转换成这种格式的字典(注意元组中的第二个元素将是键): 有没有一种方法可以将a转换为a 我试过这个: A_dict = {b:{a:c} for a,b,c in A}
A = [[(72, 1, 2), (96, 1, 4)],
[(72, 2, 1), (80, 2, 4)],
[],
[(96, 4, 1), (80, 4, 2), (70, 4, 5)],
[(70, 5, 4)],
]
我需要将它转换成这种格式的字典(注意元组中的第二个元素将是键):
有没有一种方法可以将a转换为a
我试过这个:
A_dict = {b:{a:c} for a,b,c in A}
但我有一个错误:
ValueError:没有足够的值来解包(预期为3,实际为2)
通过根据列表的长度对其索引进行迭代。对于每个值,构建自己的字典:
A_dict = {i + 1 : {v[2] : v[0] for v in A[i]} for i in range(len(A))}
将输出:
{1: {2: 72, 4: 96},
2: {1: 72, 4: 80},
3: {},
4: {1: 96, 2: 80, 5: 70},
5: {4: 70}}
实际上,您需要的代码是:
A_dict = {A[i][0][1] : {v[2] : v[0] for v in A[i]} for i in range(len(A)) if len(A[i]) > 0}
但这将“跳过”第三行,因为没有列表,因此无法根据您的规范确定实际键。根据列表的长度,通过迭代列表的索引。对于每个值,构建自己的字典:
A_dict = {i + 1 : {v[2] : v[0] for v in A[i]} for i in range(len(A))}
将输出:
{1: {2: 72, 4: 96},
2: {1: 72, 4: 80},
3: {},
4: {1: 96, 2: 80, 5: 70},
5: {4: 70}}
实际上,您需要的代码是:
A_dict = {A[i][0][1] : {v[2] : v[0] for v in A[i]} for i in range(len(A)) if len(A[i]) > 0}
但这将“跳过”第三行,因为没有列表,因此无法根据您的规范确定实际密钥。您可以执行以下操作:
A_dict = {k+1: {t[2]: t[0] for t in l} for k, l in enumerate(A)}
>>> A_dict
{
1: {2: 72, 4: 96},
2: {1: 72, 4: 80},
3: {},
4: {1: 96, 2: 80, 5: 70},
5: {4: 70}
}
您只需执行以下操作:
A_dict = {k+1: {t[2]: t[0] for t in l} for k, l in enumerate(A)}
>>> A_dict
{
1: {2: 72, 4: 96},
2: {1: 72, 4: 80},
3: {},
4: {1: 96, 2: 80, 5: 70},
5: {4: 70}
}
是的,有办法。请展示您在研究中的尝试,并解释出哪里出了问题。@roganjosh我在最后添加了我不成功的解决方案。可能重复:可能重复是的,有一种方法。请展示您在研究中的尝试,并解释出错的原因。@roganjosh我在最后添加了我不成功的解决方案。可能重复:可能重复虽然这对OP的声明输入有效,但我不确定我们是否可以想当然地认为每个元组的第二个元素总是比其在A中的索引大一个。换句话说,
k+1
似乎是确定a_dict
键的一个脆弱的解决方案@Kevink
不是来自enumerate
的吗?虽然这对OP的声明输入有效,但我不确定我们是否可以想当然地认为每个元组的第二个元素总是比其在a中的索引大一个。换句话说,k+1
似乎是确定a_dict
键的一个脆弱的解决方案@Kevink
不是来自enumerate
的吗?虽然这对OP的声明输入有效,但我不确定我们是否可以想当然地认为每个元组的第二个元素总是比其在a中的索引大一个。换句话说,i+1
对于确定a_dict
的键来说似乎是一个脆弱的解决方案。你是对的,但这与他的预期输出不一致,但是我会解决这个问题。虽然这对OP的声明输入有效,我不确定我们是否可以想当然地认为每个元组的第二个元素总是比其在A中的索引大一个。换句话说,I+1
似乎是确定A_dict
的键的一个脆弱的解决方案。您是对的,但这与他预期的输出不一致,但是,我会解决这个问题。