【问题标题】:A more idiomatic way to fill a dictionary in Python在 Python 中填充字典的更惯用的方法
【发布时间】:2012-06-23 23:00:43
【问题描述】:

目前,我正在尝试用 Python 填充字典,但我认为我正在做的事情有点多余。有没有更 Pythonic 的方式来执行以下操作:

if not pattern_file_map.get(which_match):
    pattern_file_map[which_match] = [line]
else:
    pattern_file_map[which_match].append(line)

pattern_file_map 是一个字典。

我知道在检查字典中是否有键时可以使用某种习语,例如 this question,但我只想用列表填充这本字典。

【问题讨论】:

    标签: python dictionary idioms


    【解决方案1】:

    你可以使用

    pattern_file_map.setdefault(which_match, []).append(line)
    

    改为。

    其他人可能会建议改用 collections.defaultdict(list),这是另一种选择,但请注意,这可能会隐藏错误,因为它会默默地创建您访问的所有密钥。

    【讨论】:

    • 您可以通过将default_factory 属性设置为None 来使defaultdict 像普通字典一样工作(这会使代码更难看)。
    • @StevenRumbalski:好点。 (请注意,我完全不反对使用defaultdict。)
    【解决方案2】:

    您可以尝试使用collections.defaultdict

    【讨论】:

      【解决方案3】:

      由于您要添加到可能存在的值:

      pattern_file_map.setdefault(which_match, []).append(line)
      

      如果使用dict.get()

      li = pattern_file_map.get(which_match, [])
      li.append(line)
      pattern_file_map[which_match] = li
      

      当然,这两种情况都仅限于您的 dict 的值是列表的情况。

      【讨论】:

      • pattern_file_map.get(which_match, []) 和 pattern_file_map.setdefault(which_match, []) 有什么区别?
      • .get(key,default) 返回一个值或默认值(没有设置),并且需要重新分配到字典中。在这种情况下,.setdefault(key,default) 是更好的选择。我更正了我的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      • 2013-04-28
      • 1970-01-01
      相关资源
      最近更新 更多