这是一个简单的问题,但我很难找到答案。数据的例子:
nested = {
"Moli": {
"Buy": 75,
"Sell": 53,
"Quantity": 300,
"TF": True},
"Anna": {
"Buy": 55,
"Sell": 83,
"Quantity": 154,
"TF": False},
"Bob": {
"Buy": 25,
"Sell": 33,
"Quantity": 100,
"TF": False},
"Annie": {
"Buy": 74,
"Sell": 83,
"Quantity": 96,
"TF": True}
}
我已经有了:
subset = [d for d in nested.values() if d['TF'] == False]
这给了我一个新的嵌套字典,有两个子字典而不是四个。但如果我只想输出一个名字的对象列表呢。即["Anna" , "Bob"]
。如何选择键而不是值?
你很接近了,你可以遍历键而不是值。
nested = {
"Moli": {"Buy": 75, "Sell": 53, "Quantity": 300, "TF": True},
"Anna": {"Buy": 55, "Sell": 83, "Quantity": 154, "TF": False},
"Bob": {"Buy": 25, "Sell": 33, "Quantity": 100, "TF": False},
"Annie": {"Buy": 74, "Sell": 83, "Quantity": 96, "TF": True},
}
filtered = [x for x in nested.keys() if not nested[x]["TF"]]
print(filtered)
在字典items
:键和值的元组上迭代时使用列表推导式。您也可以使用较短的not v['TF']
如果" false "对你来说是一个足够好的测试:
subset = [k for k, v in nested.items() if not v['TF']]
print(subset)
# ['Anna', 'Bob']