2010-10-17 39 views
41

Tôi có một cuốn từ điển:Nhận một tiểu tập hợp một cuốn từ điển Python

{'key1':1, 'key2':2, 'key3':3} 

tôi cần phải vượt qua một tiểu tập hợp các từ điển mà mã của bên thứ ba. Nó chỉ muốn một từ điển có chứa các phím ['key1', 'key2', 'key99'] và nếu nó nhận được một khóa khác (ví dụ: 'key3'), nó phát nổ trong một mớ hỗn độn khó chịu. Các mã trong câu hỏi là ngoài tầm kiểm soát của tôi vì vậy tôi còn lại ở một vị trí mà tôi phải làm sạch từ điển của tôi.

Cách tốt nhất để hạn chế từ điển đối với một nhóm khóa là gì?

Với từ điển ví dụ và cho phép các phím trên, tôi muốn:

{'key1':1, 'key2':2} 

Trả lời

47
In [38]: adict={'key1':1, 'key2':2, 'key3':3} 
In [41]: dict((k,adict[k]) for k in ('key1','key2','key99') if k in adict) 
Out[41]: {'key1': 1, 'key2': 2} 

Trong Python3 (hoặc Python2.7 hoặc mới hơn), bạn có thể làm điều đó với một dict-comprehension quá:

>>> {k:adict[k] for k in ('key1','key2','key99') if k in adict} 
{'key2': 2, 'key1': 1} 
+7

Đọc hiểu Dict cũng có trong Python 2.7. –

+0

Tôi muốn có một nhà điều hành cho việc này. Giống như 'adict - {'key1'} == {'key2': 2, 'key3': 3}' – wim

+0

Dường như không có nghịch đảo hợp lý của phương thức 'dict.update' – wim

19
dict(filter(lambda i:i[0] in validkeys, d.iteritems())) 
+0

Yêu thích việc thực hiện đơn giản và ngọt ngào. –

+2

Đối với python 3, phải là 'd.items()'. – refi64

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