我在python中有以下列表:
rooms = [1,'John','Mike','Simona',2,'Peter','Mark',3,'Olivia']
Run Code Online (Sandbox Code Playgroud)
我想把它转换成字典.整数表示房间和名称是字符串:
rooms = {'room1': ['John','Mike','Simona'], 'room2': ['Peter','Mark'], 'room3': ['Olivia']}
Run Code Online (Sandbox Code Playgroud)
我怎么能以优雅的方式做到这一点?
您可以按类型分组,使用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])
Run Code Online (Sandbox Code Playgroud)
这会按对象类型将输入列表分组.这为您提供了交替的组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']}
Run Code Online (Sandbox Code Playgroud)