Art*_*tur 0 python dictionary list time-complexity
问题:如何有效地和python地将列表列表my_list转换为dict,my_dict以便每个嵌套列表的第0个元素是键,其余元素是值(也是列表).
例:
输入:
my_list = [['a', 'b'],
['b', 'c', 'd', 'e', 'f'],
['g'],
['h', 'i', 'j'],
['k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't']]
Run Code Online (Sandbox Code Playgroud)
输出:
my_dict = {'a': ['b'],
'b': ['c', 'd', 'e', 'f'],
'g': None,
'h': ['i', 'j'],
'k': ['l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't']}
Run Code Online (Sandbox Code Playgroud)
附注: 我的数据集非常庞大,因此该方法需要清洁高效.虽然迭代列表是可以接受的,但我宁愿避免嵌套循环(以保持O(n)复杂性).我设法编写了一个函数,通过迭代输入列表并弹出第0个元素来完成工作,但弹出本身是O(n),使整个解O(n*n).
使用字典理解.值列出或None通过None使用or运算符将索引1中的列表切片短路来创建:
dct = {lst[0]: lst[1:] or None for lst in my_list}
pprint(dct)
Run Code Online (Sandbox Code Playgroud)
{'a': ['b'],
'b': ['c', 'd', 'e', 'f'],
'g': None,
'h': ['i', 'j'],
'k': ['l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't']}
Run Code Online (Sandbox Code Playgroud)
复杂性:
这个词的复杂性.可比.是O(n*m),其中n是列表中的项数,m是最大切片的长度.这里的增益不会降低时间复杂度,而是降低CPU时间.