我有一个问题。我有一个像这样的嵌套字典:
{1: {'amount': 200.0, 'quantity': 0}, 2: {'amount': 200.0, 'quantity': 0}, 3: {'amount': 200.0, 'quantity': 0}, 4: {'amount': 200.0, 'quantity': 0}, 5: {'amount': 200.0, 'quantity': 0}, 6: {'amount': 200.0, 'quantity': 0}, 7: {'amount': 200.0, 'quantity': 0}, 8: {'amount': 200.0, 'quantity': 0}, 9: {'amount': 200.0, 'quantity': 0}, 10: {'amount': 200.0, 'quantity': 0}}
我需要做的是创建一个包含所有amount
大于10
的字典的数组/列表。我已经有了以下内容:
list(filter(lambda x: x['amount'] >= 10, myDict.values()))
但这将导致一个仅包含字典值的列表,但我希望它们也包含键。
I got this now as result:
[{'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}, {'amount': 200.0, 'quantity': 0}]
但这就是我需要的:
[{1: {'amount': 200.0, 'quantity': 0}}, {2: {'amount': 200.0, 'quantity': 0}}, etc]
我怎样才能包括钥匙?
如果是这样的话,列表推导应该可以工作:
out = [{k:v} for k,v in my_data.items() if v['amount']>=10]
或使用filter
:
out = [*map(dict, zip(filter(lambda x: x[1]['amount']>=10, my_data.items())))]
输出:[{1: {'amount': 200.0, 'quantity': 0}},
{2: {'amount': 200.0, 'quantity': 0}},
{3: {'amount': 200.0, 'quantity': 0}},
...
{9: {'amount': 200.0, 'quantity': 0}},
{10: {'amount': 200.0, 'quantity': 0}}]
对于可以按键遍历的字典,甚至更简单:
out = {k:v for k,v in my_data.items() if v['amount']>=10}
或
out = dict(filter(lambda x: x[1]['amount']>=10, my_data.items()))
,其中输出:
{1: {'amount': 200.0, 'quantity': 0},
2: {'amount': 200.0, 'quantity': 0},
3: {'amount': 200.0, 'quantity': 0},
...
9: {'amount': 200.0, 'quantity': 0},
10: {'amount': 200.0, 'quantity': 0}}