2012-08-01 19 views
9

tôi thêm vào phần giá trị của một cuốn từ điển tên và giá trị của các thuộc tính của một mục:Python để truy cập vòng hai yếu tố tại một thời điểm

value+=child.get('name') + '\t' + child.text + '\t' 

Mỗi đoạn văn bản được phân cách bằng một tab . Vì vậy, sau đó khi tôi xử lý chuỗi giá trị này sau, tôi chia nhỏ trên các tab và có vòng lặp for để lặp qua danh sách.

Tôi làm cách nào để truy cập cả tên và giá trị trong vòng lặp for. Đối với mỗi tài sản tôi muốn có được tên và giá trị trong một lần và viết nó vào một tập tin. Hiện nay danh sách có vẻ như:

[a, b, a, b, a, b, a, b]

và cho mỗi a, b Tôi muốn viết:

'<' tag tên = a '>' b '<'/tag '>'

+0

Không bao giờ sử dụng + = trên số lượng lớn các chuỗi nối. Thực hiện một phép lặp lại và sử dụng tham gia thay vì –

Trả lời

16

Bạn có thể duyệt qua danh sách với bước kích thước 2, và nhận được tên và thẻ mỗi qua mỗi lần lặp ...

for i in range(0,len(list1),2): 
    name = list1[i] 
    tag = list1[i+1] 
    print '<tag name="%s">%s</tag>' % (name, tag) 
4

Chỉnh sửa: Nếu phím của bạn là duy nhất, và thứ tự không quan trọng, sau đó ...

Tôi nghĩ bạn nên convert your list to a dictionary, và sau đó lặp lại trên các phím của từ điển:

# assuming you converted your list to a dictionary called values 

for k in values: 
    print '<tag name="%s">%s</tag>' % (k, values[k]) 

Sửa : Nếu bạn không cần từ điển cho bất cứ điều gì nhưng in ra kết quả, sau đó câu trả lời khác đã được đăng có lẽ là một phương pháp tốt hơn.

+0

Nếu chúng tự nhiên đi cùng nhau theo một cách nào đó khác với giá trị tên: như là điển hình cho ánh xạ từ điển, bạn có thể lưu trữ chúng dưới dạng bộ dữ liệu. – CosmicComputer

+0

Trong khi tôi có xu hướng đồng ý với bạn nói chung rằng một 'dict' là một giải pháp tốt đẹp, việc chuyển đổi trong trường hợp này là không tầm thường. OP sẽ cần phải cẩn thận khi populating 'dict' để kiểm tra nếu một khóa đã tồn tại - thay vì ghi đè lên nó sẽ phải gắn thêm vào giá trị. – jmetz

+0

Bạn không bị mất lệnh? –

4

Trước hết, sử dụng chuỗi + = string2 là một ý tưởng tồi, vì mỗi lần nó sao chép vào chuỗi mới.

value+=child.get('name') + '\t' + child.text + '\t' 

nên

values = ((child.get('name'),child.text) for child in children) 

sau đó khi bạn in, chỉ cần làm

for name,text in values: 
    print '<tag name="{name}">{text}</tag>'.format(name=name,text=text) 

nếu vì một lý do nào, bạn thực sự muốn các tab, sau đó bạn sẽ phải thay đổi các nhà xây dựng giá trị vào danh sách (từ máy phát điện) và làm:

''.join((name+'\t'+value+'\t' for name,value in values))[:-1] 
+0

Trong khi câu trả lời của tôi trả lời câu hỏi trực tiếp nhất, tôi nghĩ đây là cách tiếp cận tốt nhất (và đa số nhất) cho đến giờ nếu OP không bận tâm chuyển sang cách tiếp cận danh sách. – jmetz

+0

Đồng ý, bằng cách sử dụng các tab làm dấu phân cách mà bạn chia nhỏ ở nơi khác, không có ý nghĩa gì cả, đây là cách tiếp cận sạch hơn/tốt hơn nhiều. –

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