2012-06-15 35 views
7

Tôi có từ điển có các phím được liên kết với danh sách.Truy cập các mục trong danh sách trong python từ điển

mydict = {'fruits': ['banana', 'apple', 'orange'], 
     'vegetables': ['pepper', 'carrot'], 
     'cheese': ['swiss', 'cheddar', 'brie']} 

Điều tôi muốn làm là sử dụng câu lệnh if nếu tôi tìm kiếm mục và trong bất kỳ danh sách nào trong từ điển, nó sẽ trả về khóa. Đây là những gì tôi đã cố gắng:

item = cheddar 
if item in mydict.values(): 
    print key 

nhưng nó không làm gì cả, đầu ra nên là:

cheese 

Điều này có vẻ như một điều đơn giản nhưng tôi chỉ không thể tìm nó ra. Mọi trợ giúp đều tuyệt vời.

Trả lời

7

Bạn sẽ phải sử dụng một for, một đơn giản if là không đủ để kiểm tra một bộ chưa biết danh sách:

for key in mydict.keys(): 
    if item in mydict[key]: 
     print key 

Một cách tiếp cận mà không có một for tuyên bố rõ ràng sẽ có thể như thế này:

foundItems = (key for key, vals in mydict.items() if item in vals) 

trả về tất cả các khóa được liên kết với item. Nhưng nội bộ, vẫn còn một số loại lặp đi lặp lại đang diễn ra.

+0

Điều gì sẽ xảy ra nếu tôi muốn "truy cập" danh sách được liên kết với mỗi khóa và biến nó thành 'temp_array' bên trong vòng lặp for, để tính toán của riêng tôi? Hãy nói rằng tôi phải kiểm tra một cái gì đó liên quan đến các giá trị của danh sách. Trong trường hợp của tôi, danh sách sẽ chỉ chứa số nguyên. – FaCoffee

+1

@FrancescoCastellani phụ thuộc vào trường hợp sử dụng thực tế của bạn; bạn chỉ có thể truy cập 'mydict [key]' trong bất kỳ lần lặp nào, như trong đoạn đầu tiên; hoặc bạn có thể làm một cái gì đó như 'map (mydict.values ​​(), own_calculations)'. – phg

2
mydict = {'fruits': ['banana', 'apple', 'orange'], 
    'vegetables': ['pepper', 'carrot'], 
    'cheese': ['swiss', 'cheddar', 'brie']} 

item = "cheddar" 
if item in mydict['cheese']: 
    print ("true") 

công trình này, nhưng bạn phải tham khảo các phím trong từ điển như pho mát, rau, vv thay vì cách bạn tạo từ điển, hy vọng điều này sẽ hữu ích!

1
mydict = {'fruits': ['banana', 'apple', 'orange'], 
    'vegetables': ['pepper', 'carrot'], 
    'cheese': ['swiss', 'cheddar', 'brie']} 

item = "cheddar" 

for key, values in mydict.iteritems(): 
    if item in values: 
     print key 

Nếu bạn đang đi để làm rất nhiều loại tìm kiếm, tôi nghĩ bạn có thể tạo ra một chỉ số ngược lại cho bản gốc mydict để tăng tốc độ truy vấn:

reverse_index = {} 

for k, values in mydict.iteritems(): 
    for v in values: 
     reverse_index[v] = k 

print reverse_index.get("cheddar") 
print reverse_index.get("banana") 

Bằng cách này bạn don' t phải đi qua danh sách values mỗi lần để tìm một mục.

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