嵌套字典理解与使用值作为键:值相结合



我有一个以下格式的数据结构:

dict = {
garbage1:{currency: 'JPY', maturity: 20apr2021, yield:-0.50%}, 
garbage2:{currency: 'JPY', maturity: 30mar2022, yield:-0.2%},
garbage3:{currency: 'EUR', maturity: 15may2021, yield: +0.1%}
}

我希望这成为

new_dict = {
'JPY': {20apr2021:-0.50%, 30mar2022,-0.20%},
'EUR': {15may2021:+0.1%}
}

所以我正在尝试使用嵌套字典理解,并将其与将值转换为键值相结合。挣扎。这是我迄今为止能得到的最远的:

new_dict = {outer_val: {inner_val["maturity"]: inner_val["yield"] for inner_key, inner_val in outer_val.items()}
for outer_key, outer_val in dict.items()}

您可以使用循环来执行此操作:

new_dict = {}
for value in dict.values():
if value['currency'] not in new_dict:
new_dict[value['currency']] = [value['maturity']]
else:
new_dict[value['currency']].append(value['maturity'])

另请注意:

  1. new_dict中,您尝试将字典存储为值,但这看起来像一个列表(没有键或值(。所以在上面的代码中,我使用了常用的列表。
  2. 我不知道这些是什么:currencymaturity等。所以我改用字符串

可以将其编写为复杂的嵌套字典理解,但我不推荐它。 使用defaultdict并循环遍历原始字典中的条目要简洁得多:

from collections import defaultdict
from typing import Any, Dict
my_dict: Dict[str, Dict[str, Any]] = {
"garbage1": {"currency": 'JPY', "maturity": "20apr2021", "yield": -0.50},
"garbage2": {"currency": 'JPY', "maturity": "30mar2022", "yield": -0.2},
"garbage3": {"currency": 'EUR', "maturity": "15may2021", "yield": +0.1}
}
new_dict: Dict[str, Dict[str, float]] = defaultdict(dict)
for entry in my_dict.values():
new_dict[entry["currency"]][entry["maturity"]] = entry["yield"]

最新更新