为列表的元素分配许多值

时间:2014-08-05 22:05:14

标签: python list dictionary

如果我只想为列表中的元素分配一个值,我总是使用dictionary。例如:

{'Monday':1, 'Tuesday':2,...'Friday':5,..}

但我想分配给列表many values的一个元素,例如:

Monday: Jogging, Swimming, Skating
Tuesday: School, Work, Dinner, Cinema
...
Friday: Doctor

是否有任何内置结构或简单的方法在python中制作这样的东西? My idea:我正在考虑这样的事情:一个字典作为key持有一天而value持有一个列表,但也许有更好的解决方案。

1 个答案:

答案 0 :(得分:2)

值为列表的字典非常好,实际上非常常见。

事实上,您可能需要考虑对此的扩展:collections.defaultdict(list)。这将在您第一次访问任何键时创建一个新的空列表,因此您可以编写如下代码:

d[day].append(activity)

......而不是:

if not day in d:
    d[day] = []
d[day].append(activity)

defaultdict的缺点是您无法再检测到查找代码中缺少某个密钥,因为它会自动创建一个新密钥。如果这很重要,请使用常规dictsetdefault方法:

d.setdefault(day, []).append(activity)

可以将这些解决方案中的任何一个包装在一个“MultiDict”类中,该类封装了它是一个列表字典的事实,但是列表字典的想法是这样一个常见的习惯用法真的没有必要隐藏它。