2015-09-17 17 views
10

Tôi có một cuốn từ điểnThay thế phím trong một cuốn từ điển

event_types={"as":0,"ah":0,"es":0,"eh":0,"os":0,"oh":0,"cs":0,"ch":0} 

Làm thế nào tôi có thể thay thế a bởi append, s bởi see, h bởi horse, e bởi exp với một không gian ở giữa.

Output cái gì đó như:

{"append see":0,"append horse":0,"exp horse":0....} 
+0

bạn không thể chỉ xóa các mục nhập của mình và tạo lại các mục mới nếu danh sách của bạn quá ngắn? – Julien

+1

@JulienBernu Nó lớn hơn thế. –

Trả lời

15

Có một từ điển với thay thế của bạn, như thế này

keys = {"a": "append", "h": "horse", "e": "exp", "s": "see"} 

Bây giờ, nếu các sự kiện của bạn trông như thế này

event_types = {"as": 0, "ah": 0, "es": 0, "eh": 0} 

Đơn giản chỉ cần tái tạo lại nó với sự hiểu biết từ điển, như thế này

>>> {" ".join([keys[char] for char in k]): v for k, v in event_types.items()} 
{'exp see': 0, 'exp horse': 0, 'append see': 0, 'append horse': 0} 

Đây, " ".join([keys[char] for char in k]), lặp lại các ký tự trong k, tìm nạp các từ tương ứng từ keys từ điển và tạo thành một danh sách. Sau đó, các phần tử của danh sách được nối với ký tự khoảng trắng, để lấy khóa mong muốn.

+0

Không cần phải hiểu danh sách: '" ".join ([phím [char] cho char trong k])' -> '" ".join (các phím [char] cho char trong k)' – warvariuc

+0

@warvariuc join is thường chậm hơn với gen exps. Đó là lý do tại sao tôi thích danh sách hiểu luôn luôn – thefourtheye

+0

Giải pháp này giả định rằng tất cả các phím cũ sẽ được thay thế, không chỉ hai biến thể chữ. Chỉ cần lưu ý rằng OP không nói gì về nó – holroy

3

iterate trên khóa và giá trị của từ điển gốc, biến đổi chìa khóa, sau đó lưu trữ các giá trị trong từ điển kết quả sử dụng phím chuyển đổi. Để chuyển đổi khóa, ánh xạ các ký tự của nó, thay thế bằng cách tra cứu trong từ điển ánh xạ ({ "a" : "append", ... }), sau đó kết hợp với dấu cách.

2

Không chắc chắn nếu bạn có thể thêm hay không, nhưng bạn có thể làm một trong lót sau:

>>> dict={} 
>>> dict={"a":"b"} 
>>> dict["aha"]=dict.pop("a") 
>>> dict 
{'aha': 'b'} 

Bạn có thể đi qua các phím và thay đổi chúng theo nhu cầu của bạn.

3

Đầu tiên tạo ra một từ điển bản đồ để lập bản đồ các chữ cái duy nhất để chữ:

mm={"a":"append", "s":"see","h":"horse","e":"exp","c":"corn","o":"ocelot"} 

sau đó chuyển đổi từ điển đầu vào của bạn đến một danh sách các trọng điểm, các bộ giá trị, viết lại chìa khóa bằng cách sử dụng dict lập bản đồ và tạo ra một danh sách mới các bộ dữ liệu bao gồm khóa mới, giá trị ban đầu, cuối cùng chuyển đổi danh sách các bộ dữ liệu thành một dict.

dict(map(lambda e: ("%s %s" % (mm[e[0][0]], mm[e[0][1]]), e[1]), event_types.items())) 
Các vấn đề liên quan