为什么在尝试将值附加到字典键时出现错误?

时间:2014-06-17 15:45:12

标签: python list python-2.7 dictionary append

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

这两个列表是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

1 个答案:

答案 0 :(得分: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]}