簡體   English   中英

如何將字典列表轉換為列表值中每個字典的列表?

[英]How to convert a list of dictionaries into a list of each dictionary in the list's values?

我正在嘗試生成一個類別列表,我可以將其傳遞到html模板以呈現所有類別的導航欄。 在我的mongo數據庫中的產品集合中,每個產品都有一個類別字段。 使用下面的代碼,我會生成所有類別的pymongo游標。

categories = Database.DATABASE[ProductConstants.COLLECTION].find({}, {'category': True, '_id': False})

print(categories)
<pymongo.cursor.Cursor at 0x1049cc668>

將類別放在列表中給我

categories = list(categories)

print(categories)

[{'category': 'Phones'},
 {'category': 'Phones'},
 {'category': 'Phones'},
 {'category': 'Phones'},
 {'category': 'Phones'},
 {'category': 'Soaps'}]

這似乎是朝正確方向邁出的一步。 我希望類別的最終輸出為:

print(categories)

['Phones', 'Soaps']. 

我嘗試這樣做:

categories = [category.values() for category in categories]
print(categories)

[dict_values(['Phones']),
 dict_values(['Phones']),
 dict_values(['Phones']),
 dict_values(['Phones']),
 dict_values(['Soaps'])]

如果我可以擺脫dict_values,則可以使用sum(categories,[])來平整該列表,然后將其放入set()中,這樣我就不會有任何重復項。 我相信這會給我想要的結果,但不確定如何去做。 也許我走錯了路,並且有更好的方法來解決所有這些問題? 意見將不勝感激。

聽起來您需要一組類別:

categories = [{'category': 'Phones'},
 {'category': 'Phones'},
 {'category': 'Phones'},
 {'category': 'Phones'},
 {'category': 'Phones'},
 {'category': 'Soaps'}]


# use a set to eliminate the duplicate categories
c = set(d['category'] for d in categories)
print(list(c))

輸出:

['Soaps', 'Phones']

更新:

c = {d['category'] for d in categories} # equivalent using a set comprehension

嘗試這個

categories = Database.DATABASE[ProductConstants.COLLECTION].find({}, {'category': True, '_id': False}).distinct('category')


print categories

此類別列表將包含不同數量的類別值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM