如何将键控的2列表列表转换为同键的N列表列表?

gar*_*ary 1 python

如何创建以第一个元素为键的列表列表:

从:

myList = [ [26, 'hello'], [26, 'hola'], [26, 'hi'], [26, 'bonjour'], [27, 'bye'],[27, 'doei'], [27, 'see you'], [27, 'tot ziens'] ]
Run Code Online (Sandbox Code Playgroud)

至:

[ [26, 'hello', 'hola', 'hi', 'bonjour'], [27, 'bye', 'doei', 'see you', 'tot ziens'] ]
Run Code Online (Sandbox Code Playgroud)

Oli*_*çon 5

由于您希望根据键对值进行分组,因此可能不是list您要查找的输出,而是a dict.这将在以后允许恒定时间查找.

myList = [[26, 'hello'], [26, 'hola'], [26, 'hi'], [26, 'bonjour'],
          [27, 'bye'], [27, 'doei'], [27, 'see you'], [27, 'tot ziens']]

myDict = {}

for k, v in myList:
    myDict.setdefault(k, []).append(v)

print(myDict)
Run Code Online (Sandbox Code Playgroud)

产量

{26: ['hello', 'hola', 'hi', 'bonjour'], 27: ['bye', 'doei', 'see you', 'tot ziens']}
Run Code Online (Sandbox Code Playgroud)

虽然如果你绝对需要一个列表列表,你可以这样获得它:

# Only valid in Python3, use [k] + v in Python2
listOfLists = [[k, *v] for k, v in myDict.items()]

print(listOfLists)
Run Code Online (Sandbox Code Playgroud)

产量

[[26, 'hello', 'hola', 'hi', 'bonjour'], [27, 'bye', 'doei', 'see you', 'tot ziens']]
Run Code Online (Sandbox Code Playgroud)