在Python中,将list转换为dict,以便第n个元素是一个键

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).

Mos*_*oye 7

使用字典理解.值列出或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时间.

  • @Chris_Rands是的,但*扩展解包*仅适用于Python 3. (2认同)