转换一个列表进行设置,但如果为空则使用默认值

时间:2012-02-21 12:54:56

标签: python list set

如果这样的列表不为空,我正在寻找一种更好的方法来为列表的内容分配一个集合,否则应该使用另一个列表。

如果有可能,我想要一个更好的方式来写这个(或者为什么这是最好的方式的争论):

if args.onlyTheseServers:
    only = set(args.onlyTheseServers)
else:
    only = set(availableServers)

5 个答案:

答案 0 :(得分:11)

only = set(args.onlyTheseServers or availableServers)

答案 1 :(得分:3)

查看之前的question,我会说你真正想要的是一种使用argparse为缺失参数分配默认值的方法。在这种情况下,您应该使用default,如下所示:

parser.add_argument('-o', '--only', default=default_servers, ...)

这样,当未传递-o/--only选项时,命名空间将正确设置默认值。

答案 2 :(得分:2)

args.onlyTheseServers似乎是来自argparse的变量。

如果是这种情况,您应该检查default参数和set_default()方法。

以下是一个例子:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='*', default=['1', '2', '3'])
>>> args = parser.parse_args()
>>> args.foo
['1', '2', '3']
>>> args = parser.parse_args(['--foo', 'a', 'b'])
>>> args.foo
['a', 'b']

答案 3 :(得分:1)

不是更好,但至少有点短:

only = set(availableServers if args.onlyTheseServers is None 
           else args.onlyTheseServers)

您也可以

only = set(args.onlyTheseServers or availableServers) 

它的工作方式略有不同,因为它不测试None,但只有当参数为true时才是 - 在这种情况下它应该可以工作。

答案 4 :(得分:0)

叫我疯狂购买我更喜欢这个

only = set(args.onlyTheseServers) if args.onlyTheseServers is not None else set(availableServers)