【问题标题】:'str' object has no attribute 'append' attribute error when i try append to dictionaries当我尝试追加到字典时,'str' 对象没有属性 'append' 属性错误
【发布时间】:2022-01-14 18:32:31
【问题描述】:

我是一名初级程序员,这是我在这个网站上的第一篇文章。 我试图将值附加到字典中的现有键,但我不断收到属性错误。我已经尝试将值附加到另一个项目的现有密钥中,并且效果很好。所以我几乎处于死胡同。 如果你们能指出我的错误并帮助我修复我的代码,我将不胜感激。

编辑::

我想在几个答案之后,我需要更好地解释我的情况以及我要实现的目标。

我的情况是,当我进行实验时,我需要从其中提取数据的大约一百个文件(我将在下面的链接中提供其中一些)。

我试图实现的是从文件夹中的文件中提取所有数据并将其放入一个类似 .csv 样式的文件中。所以我可以更轻松地将它导入 Originlab(类似于 Excel)。

我想我的代码会做这样的事情:

提取的第一个文件:

0.9761
0.9793
0.9825
0.9852
0.9850
0.9861
0.9848
0.9881

提取的第二个文件:

0.9761 0.9850
0.9793 0.9756
0.9825 0.9751
0.9852 0.9765
0.9850 0.9753
0.9861 0.9803
0.9848 0.9856
0.9881 0.9864

等等……

可以用空格或逗号分隔。

我在一个键上需要多个值的原因是这些数字是 y 轴的值,所有数据集在 x 轴上都将具有相同的值。

文件链接: Share files

我的代码

import glob
import os

def main():

 direct = r"C:\Users\Inzaghi\Desktop\Ondra_origin"

 main_dict={}

 for filename in glob.glob(os.path.join(direct, '*.spe')): 
  
    with open(filename,'r') as file:    
        print ('file read: ' + filename)
        lst=[]
        for line in file:
            line = line.replace('# ','')
            if len(line) == 14:
                line = line.rstrip().split()
                lst.append(line[1])
      
        for count, n in enumerate(lst[:-4]):
            if count in main_dict:
                main_dict[count].append(n)
            else:
                 main_dict[count]=n
                 
with open (direct+'\celkovy_file.txt','a') as f:
     for i in range(0,len(main_dict)):
         f.write(main_dict[i] + '\n')
print('Done')

if __name__=='__main__':
    main() 

【问题讨论】:

  • 字符串不能附加..只能列出..
  • main_dict[count]=n 应该是main_dict[count]=[n]
  • 我建议你使用collections.defaultdict()或者maindict.setdefault()这样你就不需要自己去检查key是否存在了。
  • main_dict.setdefault(count, []).append(n)

标签: python python-3.x dictionary attributes attributeerror


【解决方案1】:
main_dict[count] += n

应该会给你想要的结果

虽然这会使值变成一个长字符串。如果您希望这些值是一个列表,您可以这样做:

       if count in main_dict:
            main_dict[count].append(n)
        else:
             main_dict[count]= [n]

【讨论】:

  • 你好,我试过你的建议,但它仍然给我一个“属性错误:'str'对象没有属性'append'”。我编辑了我的帖子以更好地解释它的意图。
  • 您好,您的解决方案确实有效。当我试图自己解决它时,我做到了并发现了我的错误。非常感谢。
【解决方案2】:

改变这个

for count, n in enumerate(lst[:-4]):
    if count in main_dict:
        main_dict[count].append(n)
    else:
        main_dict[count]=n

for count, n in enumerate(lst[:-4]):
    main_dict.setdefault(count, []).append(n)

dict.setdefault 方法将为键设置默认值(在本例中为空列表),如果它不在字典中。如果存在,append 方法会将迭代项附加到其对应的值列表中。

【讨论】:

  • 您好,我尝试了您的建议,但我需要一个键中的多个值。我编辑了我的帖子以更好地解释它的意图。
  • 哦,谢谢你的解释。
猜你喜欢
  • 1970-01-01
  • 2022-08-02
  • 2016-04-07
  • 1970-01-01
  • 2015-03-08
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 2015-02-17
相关资源
最近更新 更多