# Ví dụ về chương trình Python sử dụng trình vòng lặp ngược của từ điển Show
# Tạo một từ điển Python về các giá trị rgb màu = {"r". 124, "g". 234, "b". 126}; # In từ điển theo thứ tự thông thường print("Từ điển được in theo thứ tự chuyển tiếp. "); cho c màu in(c, màu[c]); # In từ điển theo thứ tự ngược lại print("Từ điển in theo thứ tự đảo ngược. "); cho c trong đảo ngược (màu) in(c, màu[c]); Chào mừng bạn đến với phần đầu của loạt bài Làm thế nào để Python. Trong loạt bài này, tôi tập hợp một số bài viết về các vấn đề Python nhỏ có thể được giải quyết bằng một vài dòng mã. Loạt bài này được lấy cảm hứng từ các tìm kiếm hàng ngày trên Google mà tôi thực hiện để giải quyết các vấn đề của riêng mình tại nơi làm việc. Để bắt đầu, tôi đã quyết định bắt đầu loạt bài này bằng cách viết một bài viết về cách đảo ngược từ điển Tóm lại, một trong những cách tốt nhất để đảo ngược từ điển trong Python là sử dụng vòng lặp for kết hợp với phương thức `setdefault`python của từ điển để lưu trữ các khóa trùng lặp trong danh sách. Nếu đó không phải là vấn đề với bạn, thì việc hiểu từ điển sẽ rất hiệu quả. `{v. k cho k, v trong my_dict. items()}`python. Như mọi khi, chúng tôi cũng sẽ xem xét các giải pháp khác Mục lụcVideo Tổng Hợphttps. //youtube. be/lN5qX73H2BcKhông thể tải video vì JavaScript bị tắt. 4 cách đảo ngược từ điển bằng Python với My Hero Academia Quirks (https. //youtube. be/lN5qX73H2Bc) Để bổ sung cho các bài viết của mình, tôi đã tung ra các video đi kèm một cách chậm rãi nhưng chắc chắn. Trên thực tế, đây chỉ là video YouTube thứ hai của tôi, vì vậy hãy yêu thích nó Trong đó, tôi chia sẻ tất cả các giải pháp tương tự cho vấn đề đảo ngược từ điển mà bạn sẽ tìm thấy trong bài viết này. Tất nhiên, lợi thế của video là bạn có thể xem tất cả trực tiếp với một chút bình luận của riêng tôi. Nếu bạn muốn chuyển đến một phần cụ thể của video, tôi đã thiết lập dấu thời gian trong phần mô tả Giới thiệu vấn đềGần đây, tôi đang làm việc trên một dự án Python mà tôi cần đảo ngược từ điển. Đối với tất cả những người hâm mộ Boku no Hero Academia (BNHA) ngoài kia, về cơ bản, tôi muốn có thể làm được những việc sau.my_dict = { 'Izuku Midoriya': 'One for All', 'Katsuki Bakugo': 'Explosion', 'All Might': 'One for All', 'Ochaco Uraraka': 'Zero Gravity' } my_inverted_dict = { 'One for All': ['Izuku Midoriya', 'All Might'], 'Explosion': ['Katsuki Bakugo'], 'Ochaco Uraraka': ['Zero Gravity'] } Trong trường hợp này, chúng tôi có một từ điển các ký tự từ BNHA được ánh xạ tới các đặc điểm của chúng và chúng tôi muốn chuyển đổi từ điển đó thành một từ điển các đặc điểm được ánh xạ tới các ký tự có chúng Thật không may, từ điển gốc có các giá trị không phải là duy nhất, vì vậy việc lật ngược từ điển sẽ dẫn đến mất khóa. Thay vào đó, chúng tôi muốn tích lũy danh sách các khóa cho từng giá trị không phải là duy nhất trong khi thực hiện đảo ngược. Hóa ra, điều này khá dễ thực hiện Ghi chú. Nếu bạn đang muốn thực hiện tra cứu từ điển ngược (tôi. e. lấy một khóa cho trước một giá trị), tôi có cả một bài viết khác về điều đó. Nếu không, hãy tiếp tục Các giải phápNếu chúng tôi muốn đảo ngược một từ điển, chúng tôi có một số tùy chọn. Từ cách hiểu đến vòng lặp, chúng ta sẽ xem xét tất cả các giải pháp thực tế Đảo ngược từ điển với Bản đồ và đảo ngượcHãy bắt đầu loạt tùy chọn của chúng tôi bằng một trong những tùy chọn ngắn gọn hơn my_inverted_dict = dict(map(reversed, my_dict.items())) Ở đây, chúng tôi sử dụng chức năng bản đồ áp dụng chức năng đảo ngược cho tất cả các mục trong từ điển. Sau đó, chúng tôi lấy đối tượng bản đồ và chuyển đổi nó thành từ điển. Kết quả trông giống như sau my_inverted_dictionary = { 'One for All': 'All Might', 'Explosion': 'Katsuki Bakugo', 'Zero Gravity': 'Ochaco Uraraka' } Tất nhiên, nếu muốn đảm bảo không mất Midoriya, chúng ta không nên dùng cách này. Nếu không, đây sẽ là một giải pháp hoàn hảo Đảo ngược từ điển với ZipTheo Capi Etheriel , vẫn còn một cách khác để đảo ngược từ điển với các giá trị duy nhất. Cụ thể, họ đã đề cập đến việc nén các khóa và giá trị theo thứ tự ngược lại và chuyển đổi đầu ra thành từ điển.dict(zip(my_dict.values(), my_dict.keys())) Lần đầu tiên nhìn thấy giải pháp này, tôi hơi nghi ngờ liệu nó có thực sự hiệu quả hay không. Rốt cuộc, cho đến Python 3. 7, từ điển không có thứ tự . Nói cách khác, tôi cảm thấy không rõ ràng rằng `values()`python và `keys()`python sẽ trả về các danh sách thực sự xếp hàng. Đó là lý do tại sao chúng tôi thường sử dụng một phương thức như `items()`python để đảm bảo chúng tôi nhận được các khóa và giá trị cùng nhau thành các cặp.Chà, tôi tiếp tục đào. Rõ ràng, `keys()`python và `values()`python luôn tương ứng với giả định là không có thay đổi nào đối với từ điển giữa các lần gọi—ít nhất là theo một số người trên Stack Overflow . Tất nhiên, hãy lưu ý rằng chúng ta cũng sẽ mất Midoriya với giải pháp này.{ 'One for All': 'All Might', 'Explosion': 'Katsuki Bakugo', 'Zero Gravity': 'Ochaco Uraraka' } Nói cách khác, nếu bạn có các giá trị duy nhất, đây có thể là tùy chọn dành cho bạn Đảo ngược một từ điển với một sự hiểu biếtTrong Python 2. 7 trở lên, chúng ta có thể sử dụng khả năng hiểu từ điển để đảo ngược từ điển. Thật không may, nó rơi vào cùng một vấn đề đã đề cập trước đó, nhưng nó đã hoàn thành công việc cho các giá trị duy nhất my_inverted_dict = {value: key for key, value in my_dict.items()} Một lần nữa, đây là kết quả của việc đảo ngược từ điển ví dụ của chúng tôi my_inverted_dictionary = { 'One for All': 'All Might', 'Explosion': 'Katsuki Bakugo', 'Zero Gravity': 'Ochaco Uraraka' } Như chúng ta có thể thấy, chúng ta làm mất một trong những chiếc chìa khóa của mình. Có lẽ có một cách tốt hơn để đảo ngược một từ điển Đảo ngược từ điển với DefaultdictMay mắn thay, có một cách khác. Nhờ người bạn của chúng tôi, Niels van Galen Last , chúng tôi có thể hoàn thành chính xác những gì chúng tôi cần trong ba dòng mã.from collections import defaultdict my_inverted_dict = defaultdict(list) {my_inverted_dict[v].append(k) for k, v in my_dict.items()} Ở đây, chúng tôi đã chọn tận dụng đối tượng `defaultdict`python từ `collections`python. Nó cho phép chúng tôi đặt giá trị mặc định cho các khóa. Trong trường hợp này, chúng tôi đã chọn một giá trị mặc định của danh sách, vì vậy chúng tôi có thể nối thêm dữ liệu mà không gặp rủi ro về lỗi thời gian chạy. Kiểm tra kết quả ________số 8_______Vì `defaultdict`python hoạt động giống như một `dict`python thông thường nên chúng ta có thể tương tác với nó như nhau. Đây là giải pháp tuyệt vời nếu bạn không có bất kỳ yêu cầu nghiêm ngặt nào về my_inverted_dict = dict(map(reversed, my_dict.items()))6 và các giá trị của bạn không phải là duy nhất Tất cả những gì đã nói, giải pháp này được coi là phương pháp không phù hợp (đồng thời, tôi thích một nguồn tốt hơn Stack Overflow). Rốt cuộc, chúng tôi không sử dụng cách hiểu từ điển như dự định. Nó dùng để tạo từ điển, nhưng chúng tôi đang sử dụng nó để sửa đổi từ điển bên ngoài.Đảo ngược từ điển với vòng lặp ForMột cách khác để đảo ngược từ điển là sử dụng vòng lặp for. Điều này cho phép chúng tôi lặp lại tập hợp ánh xạ và xây dựng chính xác các ánh xạ mới bằng tay. Hãy xem my_inverted_dict = dict() for key, value in my_dict.items(): my_inverted_dict.setdefault(value, list()).append(key) Với phương pháp này, chúng tôi có thể đảo ngược từ điển trong khi vẫn giữ nguyên tất cả các khóa ban đầu của mình. Hãy xem điều gì sẽ xảy ra nếu chúng ta chạy đoạn mã này ________số 8_______Tuyệt vời. Chúng tôi có chính xác những gì chúng tôi cần, nhưng điều gì xảy ra nếu chúng tôi muốn trả lại từ điển này về dạng ban đầu? Hoàn nguyên đảo ngượcTrong trường hợp cơ bản khi tất cả các khóa và giá trị là duy nhất, chúng tôi có thể hoàn nguyên từ điển về ánh xạ ban đầu bằng cách sử dụng cùng một cách hiểu từ điển mà chúng tôi đã trình bày my_inverted_dict = dict(map(reversed, my_dict.items()))1 Thật không may, điều này không hoạt động với từ điển ánh xạ khóa vào danh sách. Đó là bởi vì danh sách trong Python là loại không thể băm. Nói cách khác, Python không cho phép danh sách làm khóa trong từ điển vì danh sách không phải là bất biến .May mắn thay, việc hoàn nguyên từ điển của chúng ta dễ dàng hơn so với việc đảo ngược nó ngay từ đầu. Chúng ta có thể sử dụng cách hiểu từ điển sau my_inverted_dict = dict(map(reversed, my_dict.items()))2 Như chúng ta có thể thấy, chúng ta tạo một cặp khóa-giá trị mới cho mỗi giá trị đơn lẻ trong mỗi danh sách bằng cách sử dụng cấu trúc vòng lặp kép này Hiệu suấtGần đây, tôi nghĩ sẽ rất thú vị nếu bắt đầu thêm thông tin về hiệu suất vào các bài viết này. Đặc biệt, tôi quan tâm đến việc so sánh các giải pháp này theo thời gian chạy của chúng. Để làm điều đó, chúng tôi sẽ sử dụng thư viện my_inverted_dict = dict(map(reversed, my_dict.items()))7. Trước khi chúng tôi có thể chạy các số liệu của mình, chúng tôi sẽ cần thiết lập các giải pháp của mình theo chuỗi my_inverted_dict = dict(map(reversed, my_dict.items()))3 Với chuỗi của chúng tôi trong tay, chúng tôi có thể chạy thử nghiệm của mình my_inverted_dict = dict(map(reversed, my_dict.items()))4 Hóa ra, việc hiểu từ điển rất nhanh. Tuy nhiên, hãy lưu ý rằng nó không thể xử lý các giá trị không phải là duy nhất. Nếu đó không phải là một hạn chế, thì hãy sử dụng giải pháp nhanh. Mặt khác, việc bạn chọn phương pháp nào không thực sự quan trọng Ngoài ra, để tham khảo, tôi đã chạy cái này trên máy tính để bàn Windows 10 của mình với Python 3. 7. 3. Nếu bạn muốn tìm hiểu thêm về quy trình thử nghiệm hiệu suất này, tôi có một bài viết về điều đó Tóm tắt một chútSử dụng các phương pháp trên, chúng ta có thể đảo ngược bất kỳ từ điển nào my_inverted_dict = dict(map(reversed, my_dict.items()))5 Hầu như mọi kiểu chuyển đổi từ điển khác đều nằm ngoài phạm vi của hướng dẫn này. Tuy nhiên, nếu bạn có bất kỳ câu hỏi cụ thể nào, vui lòng liên hệ trong phần nhận xét Khi bạn ở đây, bạn cũng có thể quan tâm đến những bài viết này
Nếu bạn không chắc nên bắt đầu từ đâu, tôi đề xuất danh sách Đoạn mã Python cho các vấn đề hàng ngày của tôi. Ngoài ra, bạn có thể nhận các bài viết mới nhất được gửi đến hộp thư đến của mình bằng cách trở thành thành viên hoặc đăng ký nhận bản tin.Khi bạn ở đây, hãy xem một số sản phẩm BNHA có liên quan này trên Amazon (quảng cáo)
Cảm ơn một lần nữa vì đã gắn bó Cách sử dụng Python (42 bài viết)—Dòng điều hướngLoạt bài hướng dẫn Làm thế nào để Python khác với các bài viết viết mã chuyên sâu thông thường bằng cách khám phá các vấn đề có kích thước byte trong Python. Trong loạt bài này, học sinh sẽ đi sâu vào các chủ đề độc đáo như Cách đảo ngược từ điển, Cách tính tổng các phần tử của hai danh sách và Cách kiểm tra xem tệp có tồn tại không Mỗi vấn đề được khám phá từ cách tiếp cận ngây thơ đến giải pháp lý tưởng. Thỉnh thoảng, cũng sẽ có một số giải pháp chỉ để cho vui. Ở cuối mỗi bài viết, bạn sẽ tìm thấy một bản tóm tắt đầy đủ các đoạn mã để bạn sử dụng. Đừng ngại lấy những gì bạn cần Nếu bạn không chắc nên bắt đầu từ đâu, tôi khuyên bạn nên xem danh sách Đoạn mã Python cho các vấn đề hàng ngày của chúng tôi. Ngoài ra, bạn có thể tìm thấy một số đoạn trích ở định dạng sổ ghi chép Jupyter trên GitHub ,Nếu bạn có một vấn đề của riêng bạn, xin vui lòng hỏi. Một người khác có thể có cùng một vấn đề. Thưởng thức cách sử dụng Python Tôi có thể đảo ngược từ điển bằng Python không?Phương pháp #1. Sử dụng OrderedDict() + Reverse() + items()
. Các phiên bản cũ không giữ thứ tự trong từ điển, do đó phải chuyển đổi sang OrderedDict để thực hiện tác vụ này.
Từ điển có thể được trả về từ một hàm không?Mọi đối tượng, chẳng hạn như từ điển, có thể là giá trị trả về của hàm Python . Tạo đối tượng từ điển trong thân hàm, gán nó cho bất kỳ biến nào và trả lại từ điển cho người gọi hàm. Giá trị dữ liệu được lưu trữ dưới dạng khóa. cặp giá trị trong từ điển. |