嵌套字典-抓取子字典中满足条件的指定字段的顶级键



这是一个简单的问题,但我很难找到答案。数据的例子:

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']

最新更新