def revert_dict(d):
rd = {}
for key in d:
val = d[key]
if val in rd:
rd[val].append(key)
else:
rd[val] = [key]
return rd
>>> revert_dict({'srvc3': '1', 'srvc2': '1', 'srvc1': '2'})
{'1': ['srvc3', 'srvc2'], '2': ['srvc1']}
Điều này rõ ràng không phải là trao đổi đơn giản các khóa với giá trị: điều này sẽ ghi đè lên một số giá trị (như khóa mới) mà không phải là những gì tôi sau.thông minh hơn "đảo ngược" của một từ điển trong python (acc cho một số giá trị giống nhau)?
Nếu 2 hoặc nhiều giá trị giống nhau cho các khóa khác nhau, các phím được cho là được nhóm trong danh sách.
Chức năng trên hoạt động, nhưng tôi tự hỏi có cách nào thông minh hơn/nhanh hơn không?
Nó được một lúc kể từ khi tôi đã sử dụng Python, nhưng có lẽ có điều gì đó bạn có thể làm với 'setdefault()' trên dict , để thu gọn 4 dòng của câu lệnh if thành 1? – Ken
chúng ta có thể giả định rằng các giá trị của từ điển ban đầu là không thay đổi (đủ điều kiện là khóa), hoặc nó có thể là danh sách như vậy? Nói cách khác, bạn có muốn chức năng không thể đảo ngược? Tôi đoán không, như bạn không phải là, nhưng nó cũng có thể là một lỗi trong việc thực hiện hiện tại. – kriss