2012-05-06 30 views
9

Tôi đang cố gắng sử dụng các giải pháp cung cấp hereLàm thế nào để chuyển đổi từ điển vào chuỗi

Thay vì nhận được một cuốn từ điển, làm thế nào tôi có thể nhận được một chuỗi với cùng kí tự ra ví dụ tiếp theo là số lần xuất hiện

Ví dụ: d2m2e2s3

+3

Bạn muốn định dạng chuỗi như thế nào? – Amber

+0

Bạn có thể giải thích đầu vào và đầu ra không? Bạn đang cố gắng tạo chuỗi từ từ điển 'Out [25]: {'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3} ' – shibly

+0

I muốn đầu ra là d2f2g2q5w3 – TechacK

Trả lời

29

Để chuyển đổi từ dict vào chuỗi ở định dạng mà bạn muốn:

''.join('{}{}'.format(key, val) for key, val in adict.items()) 

nếu bạn muốn họ theo thứ tự abc lệnh của chính:

''.join('{}{}'.format(key, val) for key, val in sorted(adict.items())) 
+0

Tôi muốn các chữ cái theo sau bởi mỗi lần nó xuất hiện trong chuỗi gốc theo thứ tự. – TechacK

+0

Tôi đã thử python 2.6, ValueError: tên trường có độ dài bằng 0 theo định dạng. nên là '' .join ('{0} {1}' định dạng (khóa, val) cho khóa, val trong adict.items()) –

1

một khi bạn có giải pháp dict, chỉ cần sử dụng tham gia tham gia cùng họ vào một chuỗi:

''.join([k+str(v) for k,v in result.iteritems()])

Bạn có thể thay thế các '' với bất cứ điều gì separater (kể cả không có) mà bạn muốn giữa số

+0

Yêu cầu đầu ra là loại: d2m2e2s3 – TechacK

+0

Được rồi, tôi đã sửa đổi câu trả lời của mình để bao gồm khóa (ví dụ: chữ cái) – happydave

+0

Tôi muốn các chữ cái theo sau mỗi lần xuất hiện trong chuỗi gốc theo thứ tự – TechacK

1
>>> result = {'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3} 
>>> ''.join('%s%d' % (k,v) for k,v in result.iteritems()) 
'q5w3d2g2f2' 

hoặc nếu bạn muốn họ theo thứ tự abc ...

>>> ''.join('%s%d' % (k,v) for k,v in sorted(result.iteritems())) 
'd2f2g2q5w3' 

hoặc nếu bạn muốn họ trong thứ tự tăng dần của số ...

>>> ''.join('%s%d' % (k,v) for k,v in sorted(result.iteritems(),key=lambda x:x[1])) 
'd2g2f2w3q5' 
+0

Tôi muốn các chữ cái theo sau bởi mỗi lần nó xuất hiện trong chuỗi gốc theo thứ tự – TechacK

3

Đây có phải là những gì bạn đang tìm kiếm?

#!/usr/bin/python 

dt={'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3} 
st="" 
for key,val in dt.iteritems(): 
    st = st + key + str(val) 

print st 

đầu ra: q5w3d2g2f2

Hoặc này?

#!/usr/bin/python 

dt={'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3} 
dt=sorted(dt.iteritems()) 
st="" 

for key,val in dt: 
    st = st + key + str(val) 

print st 

đầu ra: d2f2g2q5w3

Ví dụ với join:

#!/usr/bin/python 

adict=dt={'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3} 
' '.join('{0}{1}'.format(key, val) for key, val in sorted(adict.items())) 

đầu ra: 'd2 f2 g2 q5 w3'

+0

Nó không phải là biến thể tốt nhất vì việc đọc danh sách và nối chuỗi với 'join' nhanh hơn – San4ez

+0

Tôi muốn các chữ cái theo sau mỗi lần nó đã xảy ra trong chuỗi gốc theo thứ tự – TechacK

+0

Mã thứ hai có hoạt động không? – shibly

0

cách tiếp cận khác, tránh % suy (hoặc format()) bằng cách sử dụng join() chỉ:

''.join(''.join((k, str(v))) for k,v in mydict.items()) 
Các vấn đề liên quan