Python 从嵌套字典中获取字典列表,其中值大于
Python Get list of dictionaries from nested dictionary where value is greater than
我有问题。我有一个这样的嵌套字典:
{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}}
我需要做的是创建一个 array/list 和所有 amount
大于 10
的词典。我已经有以下内容:
list(filter(lambda x: x['amount'] >= 10, myDict.values()))
但这会产生一个仅包含字典值的列表,但我希望它们也包含键。
结果我现在得到了这个:
[{'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]
我怎样才能同时包含密钥?
IIUC,列表理解应该有效:
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}}]
如果是key遍历的字典,就更简单了:
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}}
我有问题。我有一个这样的嵌套字典:
{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}}
我需要做的是创建一个 array/list 和所有 amount
大于 10
的词典。我已经有以下内容:
list(filter(lambda x: x['amount'] >= 10, myDict.values()))
但这会产生一个仅包含字典值的列表,但我希望它们也包含键。
结果我现在得到了这个:
[{'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]
我怎样才能同时包含密钥?
IIUC,列表理解应该有效:
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}}]
如果是key遍历的字典,就更简单了:
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}}