[英]Type Error : Unhashable dict in python while subtracting values in two dict
all_files_list = {}
all_files_list['dir'] = [
('file1.txt', 10282020),
('file2.txt', 10282020),
('file3.txt', 10282020)]
modified_file_list = {}
modified_file_list['dir'] = [
('file1.txt', 10282020, {data : {'status1' : 1, 'status2' : 0}}),
('file2.txt', 10282020, {data : {'status3' : 0, 'status4' : 0}}),
(None, None, None)]
file_to_modify = list(set(all_files_list['dir']) - set(modified_file_list['dir']))
當我這樣做時,它給出了Type Error : Unhashable type: 'dict'
要求 - 從 modified_file_list['dir'] 中,我們應該只減去那些狀態總和為 = 0 的文件。鍵名狀態每次都可以不同。
例如: ('file2.txt', 10282020, {data : {'status3' : 0, 'status4' : 0}})
狀態 3 和狀態 4 總和為零,因此我們可以減去這些文件而不是將它們插入“ file_to_modify”。
但是對於('file1.txt', 10282020, {data : {'status1' : 1, 'status2' : 0}})
sum 不為零,則應在減去時直接將其插入“file_to_modify”中。
all_file_list['dir'] 包含文件名和文件修改時間。 如前所示,明智的修改文件列表包含文件名、文件修改時間和狀態字典。 所以我想根據文件名和文件修改時間減去。 因此,如果相同的文件名再次到達,它將具有不同的修改時間,因此我們應該考慮該文件並插入 file_to_modify
預期輸出 - file_to_modify = [('file1.txt', 10282020, {"data": {'status1': 1, 'status2': 0}}), ('file3.txt', 10282020, None)]
你必須操縱更多的數據,你不能只像這樣使用它
all_files_dict
訪問all_files_list
數據modified_files_dict
訪問modified_file_list
數據然后遍歷all_files_dict
並使用modified_files_dict
的數據來決定是否保留
all_files_list = {
'dir': [('file1.txt', 10282020),
('file2.txt', 10282020),
('file3.txt', 10282020)]}
modified_file_list = {
'dir': [('file1.txt', 10282020, {"data": {'status1': 1, 'status2': 0}}),
('file2.txt', 10282020, {"data": {'status3': 0, 'status4': 0}}),
(None, None, None)]}
all_files_dict = dict(all_files_list['dir'])
modified_files_dict = {x[0]: x[1:] for x in modified_file_list['dir'] if x[0]}
file_to_modify = []
for filename, vals in all_files_dict.items():
if filename in modified_files_dict:
sum_status = sum(modified_files_dict[filename][1]['data'].values())
if sum_status == 0:
continue
file_to_modify.append((filename, vals, modified_files_dict.get(filename, [None, None])[1]))
print(file_to_modify)
# [('file1.txt', 10282020, {"data": {'status1': 1, 'status2': 0}}), ('file3.txt', 10282020, None)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.