我试图这样做:
ip_dict = dict()
ip_list = ["10.0.0.1", "10.0.0.2"]
ip_dict.dict.setdefault(i for i in ip_list, 0)
我得到这个异常:
File "<stdin>", line 1
SyntaxError: Generator expression must be parenthesized if not sole argument
我可以一行执行此操作,还是必须两行执行?
答案 0 :(得分:5)
您可以将单行主体的for循环压缩为一行:
ip_dict = dict()
ip_list = ["10.0.0.1", "10.0.0.2"]
for i in ip_list: ip_dict.setdefault(i, 0)
但是,如果您真的想要完全一样的代码效果,那么dict.fromkeys
就足够了:
ip_list = ["10.0.0.1", "10.0.0.2"]
ip_dict = dict.fromkeys(ip_list, 0)
答案 1 :(得分:2)
您可以使用字典理解:
ip_list = ["10.0.0.1", "10.0.0.2"]
ip_dict = {k:0 for k in ip_list}
还有一个更完整的示例,如果您有默认值列表
ip_list = ["10.0.0.1", "10.0.0.2"]
ip_default = [0, 1]
ip_dict = {k: v for k, v in zip(ip_list, ip_default)}