Tôi có 4 bộ từ điển sau đây trong một bộ sưu tập MongoDB gọi favoriteColors
:iterating trên một từ điển để tạo ra một danh sách
{ "name" : "Johnny", "color" : "green" }
{ "name" : "Steve", "color" : "blue" },
{ "name" : "Ben", "color" : "red" },
{ "name" : "Timmy", "color" : "cyan" }
Tôi đang cố gắng để tạo ra một danh sách có thứ tự các giá trị màu phù hợp với một danh sách có thứ khác nhau. Ví dụ: nếu tôi có danh sách ["Johnny", "Steve", "Ben", "Johnny"]
, danh sách mới sẽ là ["green", "blue", "red", "green"]
.
Và nếu tôi có danh sách ["Steve", "Steve", "Ben", "Ben", "Johnny"]
danh sách mới sẽ là ["blue", "blue", "red", "red", "green"]
.
Cách hay để thực hiện việc này bằng Python và/hoặc PyMongo. Đây là những gì tôi có cho đến nay nhưng nó không nhận ra bản sao.
name_list = ["Steve", "Steve", "Ben", "Ben", "Johnny"]
color_list = []
for document in db.favoriteColors.aggregate([
{"$match": {"name": {"$in": name_list }}},
{"$project": {"color": 1}}
]):
for k, v in document.iteritems():
color_list.append(v)
print color_list
# ["blue", "red", "green"]
Bạn có thể tạo ra một bản đồ của ' 'name'' ->'' color'' và sau đó sử dụng bản đồ mà với 'name_list' để xây dựng các color_list? Tôi không biết đủ về mongodb để biết nếu điều này có thể được thực hiện hiệu quả, nhưng có vẻ như nó có thể là ... – mgilson