【问题标题】:Adding items to dictionary if condition is true, else dont - python如果条件为真,则将项目添加到字典中,否则不要 - python
【发布时间】:2014-07-17 21:56:07
【问题描述】:

我正在尝试采用现有流程:

if self.path_object is not None:
    dictpath = {}
    for path in self.path_object:
        self.params = path.pathval.split("?")[0]
        self.params = path.pathval.split("&", 2)
        if any(item in path.pathval for item in self.params):
            out = list(map(lambda v: v.split("=")[0] +"=" + str(self.fuzz_vectors), self.params))
            dictpath[path] = out
    print dictpath

更新 对于那些在split() 方法上寻求帮助的人。我发现使用urlparse 库更容易做到这一点。感谢用户 DarinDouglass 指出这一点。

谢谢

【问题讨论】:

    标签: python dictionary conditional


    【解决方案1】:

    这是因为无论如何您都将path 分配给dictpath。分配将运行 for 循环的每次迭代。

    要解决此问题,您可以将 pass 更改为 continue 或将 dictpath[path] = out 移动到 if 语句的 true 块中。后者是更好的选择,因为您可以删除 else 语句。


    编辑:您的 if 语句中发生了另一个问题。让我们分解一下。你的条件是这样说的:

    • self.params 中是否有任何项目可以在path.pathval 中找到。

    问题在于它总是True,因为self.paramspath.pathval 的子集;也就是说,您从path.pathval创建 self.params

    这里有一个例子来说明我的意思:

    pathval = 'www.example.com/some_path/?param1=1&param2=2'
    
    # params = ['www.example.com/some_path/?param1=1', 'param2=2']
    params = pathval.split('&', 2)
    
    # Essentially says: is the string 'www.example.com/some_path...' in pathval? YES
    if any(item in pathval for item in params)
        # Add to dict
    

    一旦您的代码得到修复,请随时将其发布到Code Review,因为我有一些更适用于那里的语句。

    【讨论】:

    • 请查看更新后的代码。这仍然包含像 www.somesite.com/path/path/path 和 somesite.com?id=6&param2=blah 这样的路径,而它应该只包含带参数的 url
    • 有什么问题吗?我很抱歉我没有看到它。我会很感激这里的任何指示
    • 谢谢。我知道 self.params 来自 path.pathval。我怎样才能让它只依赖于 self.params ?如果我理解正确的话,如果 path.pathval 中有 对象,则拆分并添加到 dict
    猜你喜欢
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2020-06-25
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    相关资源
    最近更新 更多