我在 python 中有以下列表:
rooms = [1,'John','Mike','Simona',2,'Peter','Mark',3,'Olivia']
我想把它转换成字典。整数表示房间,名称是字符串:
rooms = {'room1': ['John','Mike','Simona'], 'room2': ['Peter','Mark'], 'room3': ['Olivia']}
我怎样才能优雅地做到这一点?
最佳答案
您可以使用 itertools.groupby()
按类型分组:
from itertools import groupby
grouped = groupby(rooms, type)
rooms = {}
for key, grp in grouped:
roomname = 'room{}'.format(next(grp))
rooms[roomname] = list(next(grouped)[1])
这会将您的输入列表按对象类型分成几组。这为您提供了交替的 int
和 str
值组。然后循环检索奇数组(整数);循环体中的 next(grouped)
调用检索偶数组。
这确实假设 a) 您的第一个值是房间号,并且 b) 房间号后面永远不会紧跟另一个整数。如果是,这些整数将被完全忽略。
演示:
>>> from itertools import groupby
>>> rooms = [1,'John','Mike','Simona',2,'Peter','Mark',3,'Olivia']
>>> grouped = groupby(rooms, type)
>>> rooms = {}
>>> for key, grp in grouped:
... roomname = 'room{}'.format(next(grp))
... rooms[roomname] = list(next(grouped)[1])
...
>>> rooms
{'room2': ['Peter', 'Mark'], 'room3': ['Olivia'], 'room1': ['John', 'Mike', 'Simona']}
关于python - 从混合类型列表构造字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24330347/