Python 为字典获取列表并转换为元组

Python 为字典获取列表并转换为元组,python,Python,我有一个如下列表: 以这种格式[a、b、c、d、e] 我想做的是编一本字典,使之(a,b):(c,d,e) 我得到的错误是: ValueError:没有足够的值来解包(预期值为5,实际值为0) 我猜我的问题是格式化输入字符串,因为它没有将其作为元组读取 我想做的是在列表中作为元组读取,并提取每个集合中的5个值作为字典的值a、b、c、d、e检查大小是否为5如何 l = [ ['0', '0', '254', '0', 'R'], ['0', '97', '0', '65', '

我有一个如下列表:

以这种格式
[a、b、c、d、e]

我想做的是编一本字典,使之
(a,b):(c,d,e)

我得到的错误是:

ValueError:没有足够的值来解包(预期值为5,实际值为0)

我猜我的问题是格式化输入字符串,因为它没有将其作为元组读取


我想做的是在列表中作为元组读取,并提取每个集合中的5个值作为字典的值a、b、c、d、e

检查大小是否为5如何

l = [
    ['0', '0', '254', '0', 'R'], 
    ['0', '97', '0', '65', 'R'], 
    ['0', '98', '0', '66', 'R'], 
    []
]

out = {(x[0],x[1]):(x[2],x[3],x[4]) for x in l if len(x) == 5} # or just if x
print(out)

感谢@Jon Clements

out = {tuple(x[:2]):x[2:] for x in l if x}
返回:

{('0', '0'): ('254', '0', 'R'), 
 ('0', '97'): ('0', '65', 'R'), 
 ('0', '98'): ('0', '66', 'R')}

检查一下尺寸是不是5号

l = [
    ['0', '0', '254', '0', 'R'], 
    ['0', '97', '0', '65', 'R'], 
    ['0', '98', '0', '66', 'R'], 
    []
]

out = {(x[0],x[1]):(x[2],x[3],x[4]) for x in l if len(x) == 5} # or just if x
print(out)

感谢@Jon Clements

out = {tuple(x[:2]):x[2:] for x in l if x}
返回:

{('0', '0'): ('254', '0', 'R'), 
 ('0', '97'): ('0', '65', 'R'), 
 ('0', '98'): ('0', '66', 'R')}
您可以在字典理解中使用:

data = [['0', '0', '254', '0', 'R'], ['0', '97', '0', '65', 'R'], ['0', '98', '0', '66', 'R'], []]
result = {(a, b): (c, d, e) for a, b, c, d, e in filter(None, data)}
print(result)
输出

{('0', '97'): ('0', '65', 'R'), ('0', '98'): ('0', '66', 'R'), ('0', '0'): ('254', '0', 'R')}
{('0', '0'): ('254', '0', 'R'), ('0', '98'): ('0', '66', 'R'), ('0', '97'): ('0', '65', 'R')}
或更类似于您的代码:

rules = [['0', '0', '254', '0', 'R'], ['0', '97', '0', '65', 'R'], ['0', '98', '0', '66', 'R'], []]
result = dict(((a, b), (c, d, e)) for a, b, c, d, e in filter(None, rules))
print(result)
输出

{('0', '97'): ('0', '65', 'R'), ('0', '98'): ('0', '66', 'R'), ('0', '0'): ('254', '0', 'R')}
{('0', '0'): ('254', '0', 'R'), ('0', '98'): ('0', '66', 'R'), ('0', '97'): ('0', '65', 'R')}
您可以在字典理解中使用:

data = [['0', '0', '254', '0', 'R'], ['0', '97', '0', '65', 'R'], ['0', '98', '0', '66', 'R'], []]
result = {(a, b): (c, d, e) for a, b, c, d, e in filter(None, data)}
print(result)
输出

{('0', '97'): ('0', '65', 'R'), ('0', '98'): ('0', '66', 'R'), ('0', '0'): ('254', '0', 'R')}
{('0', '0'): ('254', '0', 'R'), ('0', '98'): ('0', '66', 'R'), ('0', '97'): ('0', '65', 'R')}
或更类似于您的代码:

rules = [['0', '0', '254', '0', 'R'], ['0', '97', '0', '65', 'R'], ['0', '98', '0', '66', 'R'], []]
result = dict(((a, b), (c, d, e)) for a, b, c, d, e in filter(None, rules))
print(result)
输出

{('0', '97'): ('0', '65', 'R'), ('0', '98'): ('0', '66', 'R'), ('0', '0'): ('254', '0', 'R')}
{('0', '0'): ('254', '0', 'R'), ('0', '98'): ('0', '66', 'R'), ('0', '97'): ('0', '65', 'R')}

您的主要问题是2D列表末尾的空
[]
列表中的最后一项是空列表。那里没有东西可以打开。你要么优雅地处理它,要么先把它清理干净。你的主要问题是2D列表末尾的空
[]
列表中的最后一项是空列表。那里没有东西可以打开。你要么优雅地处理它,要么先把它清理干净。或者
{x[:2]:x[2:]代表l}
如果x
检查结束,你是否包括了
。。。抱歉-我浏览了源数据实际上是列表的事实。。。认为它们是元组-忽略我:)或
{x[:2]:x[2:]表示l}
中的x,你是否在末尾包含了你的
如果x
检查?哦,是的。。。抱歉-我浏览了源数据实际上是列表的事实。。。以为它们是元组-别理我:)