2010-10-21 32 views
26

Tôi đã được nhìn qua tài liệu Python cho mã định dạng thực hành tốt nhất cho các danh sách lớn và từ điển, ví dụ,Python "thực hành tốt nhất định dạng" cho các danh sách, từ điển, vv

something = {'foo' : 'bar', 'foo2' : 'bar2', 'foo3' : 'bar3'..... 200 chars wide, etc..} 

hoặc

something = {'foo' : 'bar', 
      'foo2' : 'bar2', 
      'foo3' : 'bar3', 
      ... 
      } 

hoặc

something = { 
      'foo' : 'bar', 
      'foo2' : 'bar2', 
      'foo3' : 'bar3', 
      ... 
      } 

làm thế nào để xử lý làm tổ sâu của danh mục/từ điển!

Trả lời

32

cách ưa thích của tôi là:

something = {'foo': 'bar', 
      'foo2': 'bar2', 
      'foo3': 'bar3', 
      ... 
      'fooN': 'barN'} 
+7

+1 nó phù hợp với PEP8. –

+3

Hơi kém thân thiện hơn trong việc thay đổi khóa/giá trị trên dòng đầu tiên hoặc cuối cùng trong các phần tử cú pháp khác thành changeset. –

1

Tôi thích thứ hai hoặc thứ ba.

Lý do:

  1. Mỗi phần tử là trên một dòng riêng
  2. Tiếp cận đến cuối dòng để thêm một yếu tố mới là một nỗi đau trong một trình soạn thảo văn bản
  3. Thêm một yếu tố mới rất dễ dàng
  4. Với tùy chọn thứ ba, đôi khi bạn có thể kiểm tra số lượng thành phần bằng cách chọn các dòng đó. Hầu hết các biên tập viên sẽ cho bạn biết số lượng các dòng được chọn.
+0

# 4 cũng hoạt động với tùy chọn thứ hai. – aaronasterling

+0

@aaronasterling: Vâng, tôi nên viết tùy chọn thứ hai và thứ ba. – pyfunc

+0

Tôi không đồng ý với # 2. Sử dụng trình soạn thảo văn bản có quyền hạn cho bạn và không hạn chế bạn. –

1

Vâng, điều đầu tiên là không có, vì các dòng của bạn chỉ nên có 79 ký tự. Liên quan đến hai lựa chọn khác, tôi cho rằng đó là vấn đề về hương vị, nhưng cá nhân tôi thích lựa chọn thứ hai hơn.

5

Xác định từ điển của bạn trong bất kỳ cách nào bạn muốn và sau đó cố gắng này:

from pprint import pprint 

pprint(yourDict) 

# for a short dictionary it returns: 

{'foo': 'bar', 'foo2': 'bar2', 'foo3': 'bar3'} 

# for a longer/nested: 

{'a00': {'b00': 0, 
     'b01': 1, 
     'b02': 2, 
     'b03': 3, 
     'b04': 4, 
     'b05': 5, 
     'b06': 6, 
     'b07': 7, 
     'b08': 8, 
     'b09': 9}, 
'a01': 1, 
'a02': 2, 
'a03': 3, 
'a04': 4, 
'a05': 5, 
'a06': 6, 
'a07': 7, 
'a08': 8, 
'a09': 9, 
'a10': 10} 

Bạn có thích đầu ra?

+0

OP không muốn biết cách in nó nhưng cách định dạng nó trong mã nguồn. – aaronasterling

+0

@aaronasterling - tất nhiên. Điều này có thể chỉ cho anh ta, làm thế nào để định dạng một cấu trúc nhất định trong mã nguồn của mình. – eumiro

+1

để in ra như thế nào? thứ hai hay thứ ba? –

1

chắc chắn không phải lựa chọn 1, một trong những điểm mạnh trong Python là mức độ dễ đọc của nó. Tùy chọn 1 làm giảm đáng kể mức độ dễ đọc đó.

Trong số 2 và 3, tôi sẽ lặp lại cùng lý do pyfunc được nêu cho cả hai.

Tuy nhiên, trong mã của riêng tôi, tôi thích tùy chọn 3 đơn giản vì yếu tố đầu tiên đôi khi bị 'mất' bằng cách ở cuối dòng khai báo, và khi lướt nhanh mã đôi khi tôi sẽ không thấy ngay lập tức. Tôi biết đó là một chút ngớ ngẩn, nhưng tâm trí hoạt động theo những cách bí ẩn ...

2

Nếu bạn đi theo số ganeti (tôn trọng PEP 8), bạn nên chọn tùy chọn thứ ba.

something = { 
      'foo1': 'bar1', 
      'foo2': 'bar2', 
      'foo3': 'bar3', 
      ... 
      } 

Tôi thích đặc biệt này. vì bạn có thể chọn chỉ các yếu tố bạn muốn. Và tôi cảm thấy việc loại bỏ hoặc thêm các phần tử vào hai đầu là nhanh hơn theo cách này.

Lưu ý: Như đã nêu trong nhận xét, không được có khoảng trắng trước ':' (E203) theo PEP.

+0

Điều này không phù hợp với PEP8 vì có khoảng trắng trước ':' (E203). –

+0

@ Török Gábor: sao chép dán lỗi: P –

+0

"ganeti" liên kết không hoạt động: ( –

24

phong cách thụt đầu dòng của aaronasterling là thứ tôi thích.Điều này, và một số phong cách khác được giải thích trong another SO Question. Đặc biệt câu trả lời của Lennart Regebro đã đưa ra một cái nhìn tổng quan tốt đẹp.

Nhưng phong cách này là người bình chọn nhất cho:

my_dictionary = { 
    1: 'something', 
    2: 'some other thing', 
} 
+0

Đó không phải là phong cách của tôi :) –

+4

Tôi đặc biệt thích python đó cho phép bạn theo mục cuối cùng của một từ điển, danh sách hoặc tuple với một dấu phẩy. Điều này giúp dễ dàng sắp xếp lại hoặc mở rộng chuỗi sau. – AndrewF

+2

@AndrewF Tôi phải đồng ý. Đó là một trong những điều duy nhất mà JSON làm tôi tức giận, trong việc từ chối xử lý dấu phẩy theo thứ tự. –

0

Tôi thích cách thứ hai:

something = {'foo' : 'bar', 
     'foo2' : 'bar2', 
     'foo3' : 'bar3', 
     ... 
     'fooN': 'barN'} 
0

trước để đọc bài viết này, tôi sẽ chọn cho lựa chọn thứ ba bạn đưa ra. Nhưng bây giờ tôi có thể đi cho một trong đó không phải là phong cách Török Gábor của:

my_dictionary = { 1: 'cái gì', 2: 'một số điều khác, }

Nhưng thật bất cứ điều gì ngoài việc bạn tùy chọn đầu tiên có lẽ là tốt.

9

Theo PEP8 style guide có hai cách để định dạng một cuốn từ điển:

mydict = { 
    'key': 'value', 
    'key': 'value', 
    ... 
    } 

HOẶC

mydict = { 
    'key': 'value', 
    'key': 'value', 
    ... 
} 

Nếu bạn muốn để phù hợp với PEP8 Tôi có thể nói bất cứ điều gì khác là sai về mặt kỹ thuật.

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