python - 从混合类型列表构造字典

标签 python

我在 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])

这会将您的输入列表按对象类型分成几组。这为您提供了交替的 intstr 值组。然后循环检索奇数组(整数);循环体中的 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/

相关文章:

python - 如何在 Tkinter 文本框上设置对齐方式

javascript - 如何在浏览器中显示大量的websocket消息?

python - 树状图 y 轴标记困惑

python - 优化使用 python (Django) 填充数据库的代码

python - 在这种情况下,全局变量的范围是什么?

python - C 元与 cmake 依赖问题

php - 强制删除 phpmyadmin 和 PHP7.0 子进程错误

python - 如何从 Google App Engine 数据存储区查询中订购引用的对象?

python - 以 eps 格式导出时,Matplotlib 标签/标题消失

python - 相当于 `a?b:c`