我正在尝试接收给定路径中的所有文件,并根据我的数据标题名称对它们进行排序。 所以我的数据标题名称是:
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
我做错了什么?
答案 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)
这是一个简单的示例,说明如何将另一个值添加/更新到字典中的现有键。
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'}