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
检查?哦,是的。。。抱歉-我浏览了源数据实际上是列表的事实。。。以为它们是元组-别理我:)