Python:向现有密钥字典添加另一个值

时间:2016-05-26 09:30:07

标签: python dictionary

我正在尝试接收给定路径中的所有文件,并根据我的数据标题名称对它们进行排序。 所以我的数据标题名称是:

data_titles = ['CPU','Physical_Disk','Memory','Network']

此给定路径中的文件的名称类似于'CPU_data.txt''Memory_data.txt',但也有一些文件的每个数据标题有多个文件,例如'Physical_Disk_data_1.txt''Physical_Disk_data_2.txt'.

我正试图以以下方式创建一个dicitonary:

{'Network': 'Network_data.txt', 
 'Physical_Disk': ['Physical_Disk_data_1.txt','Physical_Disk_data_2.txt'], 
 'CPU': 'CPU_data.txt', 
 'Memory': 'Memory_data.txt'}

即不覆盖较旧的值

但是我一直收到错误AttributeError: 'dict' object has no attribute 'update',如果我使用追加而不是更新,我会收到类似的错误AttributeError: 'dict' object has no attribute 'append'

table_csv_files={}
    for file_names in os.listdir(Data_folder):
        for name in data_titles:
            if name in file_names:
                if name in table_csv_files:
                    table_csv_files[name].update(file_names)
                    # Have also tried table_csv_files.append({name:file_names})
                else:
                    table_csv_files[name]=file_names

                print table_csv_files

我做错了什么?

4 个答案:

答案 0 :(得分:2)

问题在于您的值有时是字符串(例如Network),有时也是列表(例如Physical_Disk)。如果您确保它们始终是列表,您可以轻松地附加到它们:

data_titles = ['CPU','Physical_Disk','Memory','Network']
table_csv_files={}
listdir_output = ['Network_data.txt', 'Physical_Disk_data_1.txt','Physical_Disk_data_2.txt', 'CPU_data.txt', 'Memory_data.txt']
for file_names in listdir_output:
    for name in data_titles:
        if name in file_names:
            if name in table_csv_files:
                table_csv_files[name].append(file_names)
            else:
                table_csv_files[name] = [file_names]
print table_csv_files

输出:

{'Memory': ['Memory_data.txt'], 'Physical_Disk': ['Physical_Disk_data_1.txt', 'Physical_Disk_data_2.txt'], 'Network': ['Network_data.txt'], 'CPU': ['CPU_data.txt']}

答案 1 :(得分:2)

使用默认值为空defaultdict的{​​{1}},然后您可以list到词典值,而无需担心词典中已存在哪些键。

append

答案 2 :(得分:0)

根据Python documentation使用defaultdict()更好,请参阅 Moses Koledoye

的答案

您无法附加到字典中。如果列表(或实现追加方法的antoher对象),则可以追加与对应的值。

我认为这是使代码易于理解的最佳方式。仅当不存在时, setdefault 功能才会添加新的列表

   if name in file_names:
        table_csv_files.setdefault(name, [])
        table_csv_files[name].append(file_names)

答案 3 :(得分:0)

字典[key] =新值

这是一个简单的示例,说明如何将另一个值添加/更新到字典中的现有键。

my_dict = {'name': 'Rajiv Sharma', 'city': 'Delhi'}
print my_dict
my_dict['city'] = 'Kuala Lumpur'
print my_dict

输出:

{'city': 'Delhi', 'name': 'Rajiv Sharma'}
{'city': 'Kuala Lumpur', 'name': 'Rajiv Sharma'}