Bạn có thể dễ dàng xác định nếu hai dicts
là tương đương:
dict(facecolor='white', edgecolor='None', alpha=0.65) == \
{"facecolor": "white", "edgecolor": "None", "alpha":0.65}
Đây là True
.
Tuy nhiên, nếu bạn nhập các chữ cái này vào trình thông dịch Python, từ điển kết quả repr
có các giá trị theo thứ tự khác nhau.
{'alpha': 0.65000000000000002, 'facecolor': 'white', 'edgecolor': 'None'}
{'edgecolor': 'None', 'facecolor': 'white', 'alpha': 0.65000000000000002}
Điều này có thể khác nhau dựa trên phiên bản Python bạn sử dụng và tôi tin rằng trong phiên bản Python mới hơn, nó thay đổi từ khi chạy đến phiên dịch; việc nhân giống băm được phân ngẫu nhiên để ngăn các từ điển không được xây dựng với hiệu suất kém. Đầu ra ở trên là từ Python 2.6.6 (Win32).
Python dict
s không có thứ tự, theo đó chúng tôi có nghĩa là bạn không thể dựa vào thứ tự. Tuy nhiên, khi lặp qua từ điển, các phần tử phải xuất hiện theo số một số đơn đặt hàng. Lệnh này bị ảnh hưởng bởi thứ tự các mục được chèn vào, và mặc dù nó không hiển nhiên, chúng được chèn vào hai thứ tự khác nhau trong hai từ điển sau: hàm dựng dict()
nhận từ điển từ khóa, sau đó chèn vào từ điển dict
, do đó, có hiệu lực các yếu tố của dict
đầu tiên được chèn hai lần! Đầu tiên theo thứ tự bạn chỉ định chúng, sau đó theo thứ tự bất kỳ mà chúng đã kết thúc trong từ điển được xây dựng trong bước đó.
Giả thuyết: Có gì đó trong matplotlib
(hoặc phiên bản Python bạn đang sử dụng) quan tâm đến thứ tự từ điển theo thứ tự xuất hiện. Thực tế, vì từ khóa thứ hai có khóa edgecolor
đầu tiên, có lẽ nó bỏ qua mục đầu tiên giá trị hoặc có thể một trong các giá trị sau có tác dụng phụ khiến nó ghi đè edgecolor
(ví dụ: có thể facecolor
cũng đặt edgecolor
để đảm bảo không có khoảng trống giữa các khuôn mặt). Điều này có thể được gọi là một lỗi hợp lý vì hành vi có thể khác nhau dựa trên thứ tự mà từ khóa xảy ra để xuất hiện trong từ điển.
Điều này thực sự lạ ... Tôi thực sự có thể tái tạo điều này ... – mgilson
Ma quỷ thực sự là chi tiết ... – BioGeek
Tôi nghi ngờ điều này có liên quan đến 'alpha'. Việc xử lý màu rgb vs rgba là khó tính. Bạn đang sử dụng phiên bản mpl nào? – tacaswell