Python> = 3.5 thay thế: giải nén vào danh sách theo nghĩa đen [*newdict]
Các khái quát hóa giải nén mới (PEP 448) đã được giới thiệu với Python 3.5 cho phép bạn dễ dàng thực hiện:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
Giải nén với *
các công việc với bất kỳ đối tượng nào có thể lặp lại được và do từ điển trả về các khóa của chúng khi lặp qua, bạn có thể dễ dàng tạo một danh sách bằng cách sử dụng nó trong danh sách theo nghĩa đen.
Thêm .keys()
nghĩa là [*newdict.keys()]
có thể giúp làm cho ý định của bạn rõ ràng hơn một chút mặc dù nó sẽ khiến bạn mất một chức năng tra cứu và gọi hàm. (trong tất cả sự trung thực, không phải là điều bạn thực sự nên lo lắng).
Các *iterable
cú pháp tương tự như làm list(iterable)
và hành vi của nó ban đầu được ghi nhận trong phần cuộc gọi của cuốn cẩm nang Python Reference. Với PEP 448, hạn chế về nơi *iterable
có thể xuất hiện đã được nới lỏng cho phép nó cũng được đặt trong danh sách, bộ và tuple bằng chữ, hướng dẫn tham khảo trên danh sách Biểu thức cũng được cập nhật để nêu rõ điều này.
Mặc dù tương đương list(newdict)
với sự khác biệt là nó nhanh hơn (ít nhất là đối với các từ điển nhỏ) vì thực tế không có lệnh gọi hàm nào được thực hiện:
%timeit [*newdict]
1000000 loops, best of 3: 249 ns per loop
%timeit list(newdict)
1000000 loops, best of 3: 508 ns per loop
%timeit [k for k in newdict]
1000000 loops, best of 3: 574 ns per loop
với các từ điển lớn hơn, tốc độ khá giống nhau (chi phí lặp lại thông qua một bộ sưu tập lớn hơn chi phí nhỏ của một lệnh gọi hàm).
Theo cách tương tự, bạn có thể tạo bộ dữ liệu và bộ khóa từ điển:
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
hãy cẩn thận với dấu phẩy trong trường hợp tuple!