我有一个列表列表:dep = [['ArithmeticError'], ['ZeroDivisionError', 'ArithmeticError'], ['OSError'], ['FileNotFoundError', 'OSError']]
,我需要将其转换为像dep = {'ArithmeticError': None, 'ZeroDivisionError': 'ArithmeticError', 'OSError': None, 'FileNotFoundError': 'OSError'}
这样的字典。也可以将字符串列表作为值包含一些错误名称。
我看到了dict()的变体,但对我来说不起作用,因为可能有空值。
我尝试使用dep = dict(dep)
,但出现错误:“词典更新序列元素#0的长度为1; 2为必需”。
答案 0 :(得分:3)
您可以在每个子列表的末尾添加None
,然后采用前两项。
dep = dict((sublist + [None])[:2] for sublist in dep)
例如使用pprint
打印效果好
>>> dep = [['ArithmeticError'],
... ['ZeroDivisionError', 'ArithmeticError'],
... ['OSError'],
... ['FileNotFoundError', 'OSError']]
>>> from pprint import pprint
>>> result = dict((sublist + [None])[:2] for sublist in dep)
>>> pprint(result)
{'ArithmeticError': None,
'FileNotFoundError': 'OSError',
'OSError': None,
'ZeroDivisionError': 'ArithmeticError'}
编辑:为更清楚起见,我们还可以使用itemgetter
为返回的名称命名:
>>> from operator import itemgetter
>>> first_two = itemgetter(0, 1)
>>> first_two(['ZeroDivisionError', 'ArithmeticError', None])
('ZeroDivisionError', 'ArithmeticError')
然后上述解决方案变为:
>>> result = dict(first_two(sublist + [None]) for sublist in dep)
答案 1 :(得分:1)
您可以这样做:
dep = [['ArithmeticError'], ['ZeroDivisionError', 'ArithmeticError'],
['OSError'], ['FileNotFoundError', 'OSError']]
dep_dict = {}
for val in dep:
if len(val) == 1:
dep_dict[val[0]] = None
else:
dep_dict[val[0]] = val[1]
通过制作字典dep_dict
并将其键指定为dep
的值并将其值分配给None
或对应列表中的第二项来起作用。
答案 2 :(得分:1)
只需一张小支票和一个发电机
dep = dict((a[0],a[1]) if len(a)>1 else (a[0],None) for a in dep)
答案 3 :(得分:1)
您可以使用具有基本条件的生成器。
dep_dict = {i[0]: None if len(i) == 1 else i[1] for i in dep}
答案 4 :(得分:0)
也许有更简单的方法,但是您可以使用:
dep = [['ArithmeticError'], ['ZeroDivisionError', 'ArithmeticError'], ['OSError'], ['FileNotFoundError', 'OSError']]
d={}
for x in dep:
if len(x) == 1:
d[x[0]] = None
elif len(x) == 2:
d[x[0]] = x[1]
print(d)
输出:
{'ArithmeticError': None, 'ZeroDivisionError': 'ArithmeticError', 'OSError': None, 'FileNotFoundError': 'OSError'}