【问题标题】:Why am I getting an error when trying to append values to dictionary key? [closed]为什么在尝试将值附加到字典键时出现错误? [关闭]
【发布时间】:2014-08-07 17:14:27
【问题描述】:

我正在从两个列表创建一个字典,生成的字典将包含一些具有多个值的键。

这两个列表是jpg_pathsjpg_ID。我正在遍历列表以将值与键匹配,但如果键已经存在,则无法附加值。

当我尝试追加时,我收到错误 'str' object has no attribute 'append'。如何附加值?

for j in jpg_ID:
    for jp in jpg_paths:
        if j in jp:
            if j in pdf_dict.keys():
                pdf_dict[j].append(jp)
            else:
                pdf_dict[j] = jp
print pdf_dict

【问题讨论】:

  • 正如错误消息告诉您pdf_dict[j] 是一个字符串,您不能附加到它。究竟是什么让您感到困惑?
  • 我不确定如何编辑这个问题,所以它不是题外话。我包括了我的代码示例。我想我收到的错误消息就问题所在而言是显而易见的,但当时我并没有想到将我的值设置为一个列表。有时很难退后一步看看发生了什么。

标签: python list python-2.7 dictionary append


【解决方案1】:

您将第一个值设置为字符串:

pdf_dict[j] = jp

如果您想要一个列表值(包含字符串),那么使用一个:

pdf_dict[j] = [jp]

这是一个包含单个(字符串)元素的列表。

其他一些注意事项:

  • 在测试会员资格时无需致电.keys()。直接对着字典这样做:

    if j in pdf_dict:
    
  • 如果缺少键,您可以使用dict.setdefault() method 将值设置为空列表,这样您只需要使用.append() 并且不需要测试键是否已经存在:

    pdf_dict.setdefault(j, []).append(jp)
    
  • 您可以使用列表推导式一次性构建列表:

    for j in jpg_ID:
        pdf_dict[j] = [jp for jp in jpg_paths if j in jp]
    

    这可以用字典理解代替

    pdf_dict = {j: [jp for jp in jpg_paths if j in jp] for j in jpg_ID]}
    

【讨论】:

  • 感谢您的回答和帮助的 cmets
  • @holdenweb:我认为这就是 如果缺少密钥,则设置为空列表部分的意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2021-06-30
  • 1970-01-01
  • 2015-03-07
相关资源
最近更新 更多