Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 插入一行中带有for循环的列表中的多个键-dict.setdefault_Python_Python 3.x_Dictionary - Fatal编程技术网

Python 插入一行中带有for循环的列表中的多个键-dict.setdefault

Python 插入一行中带有for循环的列表中的多个键-dict.setdefault,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我试着这样做: 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 文件“”,第1行 SyntaxError:如果不

我试着这样做:

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
文件“”,第1行
SyntaxError:如果不是唯一参数,则必须将生成器表达式括起来

我可以在一行中完成,还是必须在两行中完成?

您可以将带有一行主体的for循环挤压成一行:

ip_dict = dict()
ip_list = ["10.0.0.1", "10.0.0.2"]
for i in ip_list: ip_dict.setdefault(i, 0)
但是,如果您真的想得到代码的效果,那么只需要:

ip_list = ["10.0.0.1", "10.0.0.2"]
ip_dict = dict.fromkeys(ip_list, 0)

您可以使用听写理解:

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)}

ip_列表中的i的
i与
ip_列表
相同。现在是下一个错误。我知道它的作用,我只是给了一个简单的例子here@Pythonset default不使用生成器作为参数,这将创建一个dict,其中生成器是它的一个键,值为0Mr python,如果您的问题得到解决,并且您选择了一个有帮助的答案,您可以投票支持它们,但是,为了让您和应答者获得声誉,您应该单击所选答案中的复选标记。我见过很多人因为不检查而浪费自己和他人的声誉answers@Python:不要实际使用第一个…如果您的dict不是空的,这就是为什么您需要
setdefault
,只需将循环放在两行上即可。在同一条线上阅读会让阅读变得更困难,而且毫无益处。我想在没有空白的听写上阅读。好的,谢谢你的帮助