具有可选标志的值列表的Pythonic表示

时间:2011-03-20 00:44:19

标签: python

首先出现在我脑海中的是一个字典,其中键作为列表值,字典值默认为None,但这对我来说不太理想。任何人都可以提出一个单一结构(即没有单独的'选项'dict)替代方案,其中没有标志设置的项目dict[key]返回None,否则返回标志列表?如果我忽略了一些明显的惯例,我会道歉。

此结构的一个简单用法可能是order实例,其中每个项目都可以选择包含修改(即没有坚果)。

3 个答案:

答案 0 :(得分:5)

也许默认用户会这样做:

from collections import defaultdict

flags = defaultdict(lambda : None)
flags.update({'F1':True,'F3':True,'F8':True})

for f in 'F1 F2 F3 F4 F5 F6 F7 F8'.split():
    print f, '->', flags[f]

打印:

F1 -> True
F2 -> None
F3 -> True
F4 -> None
F5 -> None
F6 -> None
F7 -> None
F8 -> True

答案 1 :(得分:1)

有几种可能性:

1)如果dict.get(key, None)没有条目,则None会返回key

2)dict = defaultdict( lambda: None )创建一个dict,如果没有给定键的条目,则自动返回None

答案 2 :(得分:0)

正如您可能从我上面的评论中收集到的,我不确定您的真实要求是什么。但我的猜测是,它们与defaultdict的建议所暗示的有些不同。听起来好像你想要一个 list 项目(有序,可能允许重复),每个项目都与一个可能空的 set 标志相关联。在这种情况下,最简单的解决方案可能是对(item,flags)的列表,其中每个flags都是一个集合对象。

这使您无法通过item查找标记,但这听起来并不像我应该做的事情。 (以您的餐厅订单为例,可能有两个人item就是HouseSalad,但其中只有一人可能有no_nuts标志。)

您当然可以通过调用list来获取每个项目集的标记列表。

在任何特定的应用程序中,可能值得创建一个类来保存此信息并提供更透明的访问方式。如果您意识到需要它们,那么可以更容易地添加额外的功能(随机示例:能够找到具有给定标志的所有项目)。