2012-06-14 24 views
6

Đây chỉ là một câu hỏi tầm thường về quy ước bạn đề xuất. Gần đây, tôi đã thấy nhiều ví dụ về những người viết dict(key1=val1, key2=val2) thay vì những gì tôi nghĩ là thành ngữ hơn {"key1": val1, "key2": val2}. Tôi nghĩ lý do là tránh sử dụng "" cho các khóa, nhưng tôi không chắc chắn. Có lẽ dict() -syntax trông gần hơn với các ngôn ngữ khác?Tôi có nên viết dict hoặc {} bằng Python khi xây dựng một từ điển có khóa chuỗi không?

+1

không phải là python tuyệt vời .. có nhiều hơn một cách rõ ràng để làm điều đó – wim

+1

Một lợi thế rõ ràng của phiên bản '{}' là nếu sau này bạn quyết định sử dụng một số khóa không phải chuỗi bạn không phải viết lại toàn bộ dòng. – James

+0

Để được ở bên an toàn, bạn luôn có thể kết hợp hai - một loại 'thắt lưng và niềng răng' phương pháp tiếp cận: '' kwargs = {"key1": "val1", "key2": "val2"}; d = dict (** kwargs) ''. – Blair

Trả lời

5

Tôi sẽ đi ngược lại dòng chảy ở đây:

Sử dụng phương pháp dict() nếu nó phù hợp với bạn, nhưng giữ những hạn chế nêu trong các câu trả lời khác trong tâm trí. Có một số lợi thế cho phương pháp này:

  • Nó có vẻ ít lộn xộn trong một số trường hợp
  • Đó là 3 nhân vật ít hơn mỗi cặp khóa-giá trị
  • On bố trí bàn phím nơi {} là khó khăn khi phải gõ (AltGr- 7 và AltGr-0 ở đây) sẽ nhanh hơn để loại ra
+0

Rõ ràng không phải là câu trả lời đúng ở đây, nhưng tôi thích câu trả lời của bạn tốt nhất.Tôi nghĩ rằng SO có một xu hướng đáng tiếc để tự động bỏ phiếu bình luận của người dùng có uy tín cao nhất. – Gurgeh

2

Chắc chắn, hãy dùng {}, giữ mã đơn giản & loại ít luôn là mục tiêu của tôi

+4

Vâng, ở đây bạn không thể có cả hai. Đối với hai hoặc nhiều khóa, phương thức 'dict()' sẽ có nghĩa là ít đánh máy hơn: hai dấu ngoặc kép và một ký tự khoảng trắng cho mỗi cặp khóa-giá trị, nếu bạn làm theo các khuyến nghị PEP8. –

8

{"key1": val1, "key2": val2} là thành ngữ trở lên; Tôi hầu như không bao giờ gặp phải dict với các đối số từ khóa và tôi chắc chắn không bao giờ bị cám dỗ để viết nó. Nó cũng tổng quát hơn, bởi vì đối số từ khóa phải Python định danh:

>>> {"foo bar": 1} 
{'foo bar': 1} 
>>> dict(foo bar=1) 
------------------------------------------------------------ 
    File "<ipython console>", line 1 
    dict(foo bar=1) 
       ^
SyntaxError: invalid syntax 

>>> dict("foo bar"=1) 
------------------------------------------------------------ 
    File "<ipython console>", line 1 
SyntaxError: keyword can't be an expression (<ipython console>, line 1) 
+1

Có những trường hợp khi Python sử dụng các từ mà các ngôn ngữ khác sử dụng dấu chấm câu. Nó tạo ra tiếng ồn ít hơn. 'dict()' có thể dễ đọc hơn khi nó có thể được sử dụng (Rõ ràng nó không thể được sử dụng nếu các khóa không phải là các mã định danh Python hợp lệ; trong trường hợp đó không có câu hỏi gì để sử dụng). – jfs

1

Có một số sự không rõ ràng với dấu ngoặc nhọn {}. Xem xét:

>>> x = {'one','two','three'} 
>>> type(x) 
<type 'set'> 
>>> x = {} 
>>> type(x) 
<type 'dict'> 

Trong khi không có sự mơ hồ với việc sử dụng set() hoặc dict().

+0

Điểm tốt nhưng điều này rất nhỏ khi bạn xem xét các điểm khác đang được thực hiện. – jamylak

Các vấn đề liên quan