我想知道是否有更优雅/pythonic 的方式来执行以下操作。假设我有一个嵌套字典:
orders = {'peter': {'food': 'pizza', 'drink': 'soda'}, 'paul': {'food': 'taco', 'drink': 'soda'},'mary': {'food': 'pizza', 'drink': 'water'}}
我想获得一个列表,其中包含每个人的独特“食物”项目,即['披萨', '炸 Jade 米饼']
这是最简单的方法吗?
foodList = []
for i in orders.keys():
foodList.append(orders[i]['food'])
s = set(foodList)
最佳答案
使用 set comprehension .
>>> {orders[i]['food'] for i in orders}
{'pizza', 'taco'}
如果 food
的值是列表或元组,您可以在集合理解中使用嵌套循环。
>>> orders = {'peter': {'food': ['pizza','fries'], 'drink': 'soda'}, 'paul': {'food': ['taco'], 'drink': 'soda'}}
>>> {j for i in orders for j in orders[i]['food']}
{'pizza', 'taco', 'fries'}
您甚至可以使用 operator.itemgetter
如Padraic所述.
>>> from operator import itemgetter
>>> set(map(itemgetter("food"), orders.values()))
{'pizza', 'taco'}
同样,如果食物的值是一个列表,您可以使用 chain
.
>>> from itertools import chain
>>> set(chain(*map(itemgetter("food"), orders.values())))
{'pizza', 'taco', 'fries'}
关于python - 获取嵌套字典中唯一值的列表(或集合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34110537/