Những cạm bẫy tiềm ẩn của việc hợp nhất mô-đun từ điển ChainMap trong Python [Được khuyến nghị]
In lạiTác giả: qq735679552Thời gian cập nhật: 28-09-2022 22:32:09284
CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này thảo luận về những cạm bẫy tiềm ẩn của việc hợp nhất mô-đun từ điển ChainMap trong Python [Được khuyến nghị] do tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.
Trong Python, khi chúng ta có 2 từ điển cần merge, chúng ta có thể sử dụng phương thức update của từ điển, ví dụ:
Một ={'Một':1,'b':2}
b ={'x':3,'Và':4}
Một.cập nhật(b)
in(Một)
Hiệu ứng chạy được thể hiện trong hình dưới đây:
Tuy nhiên, có một vấn đề với phương pháp này - nó làm thay đổi một trong các từ điển. Nếu không muốn thay đổi 2 từ điển gốc thì chúng ta phải tạo một từ điển riêng:
Một ={'Một':1,'b':2}
b ={'x':3,'Và':4}
c = từ điển(Một)
c.cập nhật(b)
in(c)
in(Một)
Nếu hai từ điển gốc rất lớn thì phương pháp này sẽ lãng phí rất nhiều bộ nhớ.
Cho dù bạn trực tiếp sửa đổi một trong các từ điển gốc hay tạo một từ điển khác, cả hai giải pháp đều có một số sai sót. Vậy có cách nào để không sửa đổi từ điển gốc cũng như không tạo từ điển mới không?
Câu trả lời là ChainMap trong mô-đun bộ sưu tập.
ChainMap có thể được sử dụng để hợp nhất nhiều từ điển thành một đối tượng ChainMap. Đọc và viết đối tượng này giống như đọc từ điển.
Ví dụ:
từ bộ sưu tập nhập khẩuBản đồ chuỗi
Một ={'Một':1,'b':2}
b ={'x':3,'Và':4}
c =Bản đồ chuỗi(Một, b)
in(c['Một'])
in(c['Và'])
Hiệu ứng chạy được thể hiện trong hình dưới đây:
Bạn không chỉ có thể "hợp nhất" hai từ điển, ChainMap còn có thể chấp nhận bất kỳ số lượng từ điển nào và hợp nhất tất cả chúng lại với nhau:
từ bộ sưu tập nhập khẩuBản đồ chuỗi
Một ={'Một':1,'b':2}
b ={'x':3,'Và':4}
c ={'Với':5,'TRONG':6}
ngày ={'tôi':7,'h':8,'k':9}
Và =Bản đồ chuỗi(Một, b, c, ngày)
in(Và['Một'], Và['Và'], Và['Với'], Và['k'])
Hiệu ứng chạy được thể hiện trong hình dưới đây:
ChainMap không thực sự hợp nhất các từ điển với nhau mà lưu trữ nội bộ một ánh xạ từ Khóa tới từng từ điển. Khi bạn đọc e[key], trước tiên, nó sẽ truy vấn khóa nằm trong từ điển nào, sau đó Truy vấn giá trị tương ứng trong từ điển tương ứng. Vì vậy việc sử dụng ChainMap hầu như không yêu cầu thêm dung lượng bộ nhớ (hiện tại bản thân đối tượng này sẽ chiếm một ít dung lượng, nhưng nếu bạn muốn hợp nhất một từ điển lớn thì dung lượng mà nó chiếm sẽ gần như không đáng kể).
Vậy bạn có nghĩ rằng việc sử dụng ChainMap có thể hợp nhất các từ điển một cách hoàn hảo không?
Trước khi sử dụng nó, bạn phải hiểu nó hoạt động như thế nào. Nếu bạn hiểu nó hoạt động như thế nào thì bằng cách hỏi những câu hỏi sau, bạn sẽ biết kết quả là gì trước khi chạy mã:
Nếu có một Key có cùng tên trong hai từ điển thì từ điển nào sẽ được đọc sau khi sử dụng ChainMap? Nếu bạn thêm một cặp Khóa-Giá trị vào đối tượng ChainMap, giá trị này sẽ được thêm vào đâu? Nếu Khóa bị xóa khỏi từ điển gốc, Khóa trong đối tượng ChainMap có biến mất không? Nếu bạn xóa Khóa khỏi đối tượng ChainMap, Khóa trong từ điển gốc có biến mất không?
Đầu tiên, hãy nói về câu trả lời cho câu hỏi đầu tiên:
Đối tượng ChainMap sẽ sử dụng giá trị trong từ điển đầu tiên có Khóa này, như trong hình sau:
Câu hỏi thứ hai là Khóa-Giá trị mới sẽ được thêm vào từ điển đầu tiên, như trong hình bên dưới:
Câu hỏi thứ ba là, nếu từ điển gốc được sửa đổi, đối tượng ChainMap sẽ được cập nhật tương ứng:
Câu hỏi thứ tư là nếu Key chỉ tồn tại trong một từ điển nguồn thì Key sẽ bị xóa khỏi từ điển nguồn. Nếu Khóa tồn tại trong nhiều từ điển, Khóa sẽ bị xóa khỏi từ điển đầu tiên. Sau khi bị xóa khỏi từ điển đầu tiên, ChainMap có thể tiếp tục đọc Khóa của từ điển nguồn thứ hai.
4 điểm trên phải được ghi nhớ khi bạn sử dụng ChainMap, nếu không có thể gây ra lỗi mà bạn không thể tìm thấy.
Tóm tắt.
Trên đây là những gì người biên tập giới thiệu với bạn về những cạm bẫy tiềm ẩn khi hợp nhất mô-đun từ điển ChainMap trong Python. Tôi hy vọng nó sẽ hữu ích cho bạn. Nếu bạn có bất kỳ câu hỏi nào, vui lòng để lại tin nhắn cho tôi và người biên tập sẽ trả lời bạn. thời gian! .
Link gốc: https://juejin.im/post/5d1442f7f265da1bad57178b.
Cuối cùng, bài viết này về những cạm bẫy tiềm ẩn [được khuyến nghị] khi hợp nhất mô-đun từ điển ChainMap trong Python kết thúc tại đây. Nếu bạn muốn biết thêm về những cạm bẫy ẩn [được khuyến nghị] khi hợp nhất mô-đun từ điển ChainMap trong Python, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục. để duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi có một số vectơ có độ dài khác nhau mà tôi muốn liên kết. Tôi đặt vectơ vào một danh sách và thử sử dụng do.call(cbind, ...): nm <- list(1:8, 3:8, 1:5)
Tôi có nhiều thực thể không gian trong một bảng có trường hình học được gọi là Ranh giới. Tôi muốn tạo tệp GeoJson với các hình dạng/hình học đơn giản hóa. Đây là lần thử đầu tiên của tôi: var entitie
Bất cứ ai có thể cho biết lý do tại sao lựa chọn này trả về 3.0 thay vì 3.5: SELECT kết hợp (1.0*(7/2),0) as foo Điều này trả về 3: CHỌN kết hợp (7/2,0) làm foo
Trước hết xin lỗi, có thể câu hỏi này đã được hỏi nhưng tôi không thể tìm thấy bất kỳ điều gì có thể giúp tôi, có thể do tôi thiếu kiến thức về XSLT. Tôi có XML sau: 0 OK
Đôi khi người dùng sử dụng Windows Explorer để sao chép tệp và chuyển giao chúng khi họ cần thực hiện sao chép hoặc hợp nhất ở cấp kho lưu trữ svn. Do đó, SVN không theo dõi những thay đổi này một cách chính xác. Khi tôi phát hiện ra điều này, thiệt hại rõ ràng đã xảy ra và có thể đã xảy ra với những người có liên quan.
Tôi muốn kết hợp/xếp chồng các giá trị của 2 cột khác nhau và nhận được các giá trị duy nhất. Điều này hoạt động tốt nếu các phạm vi liền kề. Ví dụ: =UNIQUE(FILTERXML(""&SUBSTITUTE(TEXTJOIN(",",TRUE,TRANSPO
Sử dụng iTextSharp, làm cách nào tôi có thể hợp nhất nhiều tệp PDF thành một mà không làm mất "trường biểu mẫu" và thuộc tính của chúng trong mỗi tệp PDF? (Tôi ước gì có một ví dụ sử dụng luồng từ cơ sở dữ liệu, nhưng hệ thống tệp cũng sẽ hoạt động) Tôi thấy mã này hoạt động tốt
Có chức năng hợp nhất ưu tiên các giá trị không thiếu trong các biến công khai không? Hãy xem xét ví dụ sau. Đầu tiên, chúng tôi tạo hai data.frames có cùng ID nhưng bổ sung các giá trị thiếu trên các biến cụ thể: set.seed
Chúng tôi đang cố gắng triển khai "Kế hoạch phân nhánh kép cơ bản" được ALM Rangers mô tả trong Hướng dẫn hợp nhất và phân nhánh TFS của Visual Studio mới nhất. .Đạo diễn từ: The base
Tôi có nhiều tệp văn bản (3 chỉ là ví dụ) trong các thư mục khác nhau (3 tên khác nhau) như sau: thư mục: A, tên tệp: run.txt định dạng: tệp txt được phân cách một 10 0,2 0,5 0.
Tôi nghĩ rằng tôi có trường hợp sử dụng SVN đơn giản nhất trên thế giới: Tôi có một tệp, Test.java trong thân SVN. Tôi đã phân nhánh thành nhánh dev. Tôi đã chuyển Test.java vào com/mycompa.
Tôi có hai khung dữ liệu trong đó một số cột có cùng tên và một số có tên khác nhau. Khung dữ liệu trông như thế này: df1 ID hello world hockey football 1 1 NA NA
Có cách nào để trả về kết quả ở dạng phẳng (nhiều phụ/agg phụ) bị thiếu trong Elaticsearch không? Ví dụ: hiện tại tôi đang cố gắng lấy tất cả các loại sản phẩm và trạng thái của chúng (trực tuyến/ngoại tuyến). Đây là những gì tôi kết thúc với: aggs [ { key:
Tôi đang cố gắng hợp nhất hai tập dữ liệu bằng cách nhập dữ liệu từ máy chủ netezza. Sau đây là tập dữ liệu có số, ID, chữ cái và tên: Các bảng sau được nhập từ netezza bằng lệnh: sqoop import --connect n
Tôi đang chạy hợp nhất trong SQL Server. Trong bản cập nhật của mình, tôi chỉ muốn cập nhật hàng khi giá trị thay đổi. Có một hàng phiên bản được tăng lên sau mỗi lần cập nhật. Đây là một ví dụ: MERGE Nhân viên với tư cách là tgt USING (SE
Tôi là một lập trình viên xuất sắc, rất giỏi!