【问题标题】:Why am I getting this error while using Python dict.setdefault?为什么在使用 Python dict.setdefault 时出现此错误?
【发布时间】:2018-07-05 20:00:22
【问题描述】:
dict.setdefault('Name','').str('Name 1')

我想在 for 循环中直接将“名称”附加到字典中,如果名称不可用,我希望它是一个空字符串。我们可以使用 setdefault 获得这个吗?

当我使用上面的代码时,我得到错误 -

AttributeError: 'str' object has no attribute 'str'

【问题讨论】:

  • 我不确定您要做什么。 setdefault 将返回一个字符串,如错误消息所示;该字符串是字典中的新值。你想用这个字符串做什么?
  • 鉴于.setdefault 要么返回现有值,要么返回默认值'',您对.str 有什么期望?
  • @jonrsharpe @APerson 这是默认方法setdefault(key,[ ]).append(value) 但我想要一个字符串而不是列表。
  • 当然,但该示例并未调用.list。它正在调用.append on 列表。那么为什么要访问.str,一个属性字符串肯定没有呢?
  • 是的,我明白这一点,但默认是setdefault 的第二个参数,根据the docs。与您的示例完全一样,其中默认值是一个空列表作为第二个参数传递。所以.setdefault('Name', '') 实现了你所说的你想要的,我完全不清楚你为什么要加上.str('Name 1')。错误信息很清楚:字符串没有str 方法。

标签: python python-3.x dictionary setdefault


【解决方案1】:

你不能做你想做的事,因为str 是不可变的,你总是需要构造一个新的字符串并将它分配回键。您可以使用 lists 执行此操作,因为 list 是可变的,即您可以改变字典中的列表。

对于str,只需使用dict.get()。这会将值附加到字典中的现有值(如果存在)或空字符串(如果不存在),例如:

d['Name'] = d.get('Name', '') + 'Name 1'

或者,使用collection.defaultdict,例如:

d = defaultdict(str)
d['Name'] += 'Name 1'

注意:不要使用dict 作为变量名,它会隐藏pythons dict 类型。

【讨论】:

    【解决方案2】:

    我想在 for 循环中直接将“名称”附加到字典中,然后 如果名称不可用,我希望它是一个空字符串

    这可以通过 setdefault 来完成:

    dict.setdefault('Name', '')
    

    注意:dict 是一个非常糟糕的变量名称:它隐藏了内置类型 dict

    【讨论】:

    • 'Name' 是这里的关键。我们如何为键赋值?
    • @BharatBittu 在我的示例中没有直接分配。请参阅我发布的文档链接:“如果键在字典中,则返回其值。如果没有,则插入值为默认值的键并返回默认值。”。这里默认是""(空字符串)
    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 2019-11-03
    • 2021-03-29
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多