2011-10-20 50 views
6

Tôi muốn biết đó sẽ là một phương pháp hiệu quả để đảo ngược từ điển trong python. Tôi cũng muốn loại bỏ các giá trị trùng lặp bằng cách so sánh các khóa và chọn lớn hơn so với giả định nhỏ hơn chúng có thể được so sánh. Dưới đây là đảo ngược một cuốn từ điển:Đảo ngược từ điển trong Python

inverted = dict([[v,k] for k,v in d.items()]) 

Trả lời

8

Để xóa các từ khóa trùng lặp bằng cách sử dụng khóa lớn nhất, hãy sắp xếp từ điển của bạn lặp theo giá trị. Cuộc gọi tới dict sẽ sử dụng phím cuối cùng được chèn vào:

import operator 
inverted = dict((v,k) for k,v in sorted(d.iteritems(), key=operator.itemgetter(1))) 
0

Đây là một thực hiện đơn giản và trực tiếp của đảo ngược một cuốn từ điển và giữ lớn hơn bất kỳ giá trị trùng lặp:

inverted = {} 
for k, v in d.iteritems(): 
    if v in inverted: 
     inverted[v] = max(inverted[v], k) 
    else: 
     inverted[v] = k 

này có thể được thắt chặt lên một chút với dict.get():

inverted = {} 
for k, v in d.iteritems(): 
    inverted[v] = max(inverted.get(v, k), k) 

mã này làm cho sự so sánh ít hơn và sử dụng ít bộ nhớ hơn so với một cách tiếp cận sử dụng sắp xếp().

+7

"Tôi cũng muốn loại bỏ các giá trị trùng lặp bằng cách so sánh các khóa và chọn lớn hơn so với giả định nhỏ hơn chúng có thể được so sánh." – agf