字典将"None"替换为值嵌套字典



我有一本字典看起来像这样:

nested_dict = { 'dictA': {'text': "ok",'useleskey':'useles_value','confidence': "lol"},
'dictB':  None, 
'dictC':  None, }

每个字典都可以填充(如dictA(或具有None值。

我想为每个词典创建一个新列表,以总结我可以获得的重要信息。

非空字典的伪代码如下所示:

list_dict_A= [nested_dict["dictA"]["text"], nested_dict["dictA"]["confidence"]]

如果字典None,那么我想创建以下列表

list_dict_B=[0, 0]

因此,在本例中,预期结果将是具有以下值的 3 个列表:

list_dict_A=["ok", "lol"]
list_dict_B=[0, 0]
list_dict_C=[0, 0]

您可以使用字典理解来做到这一点:

nested_dict = {'dictA': {'text': "ok", 'useleskey': 'useles_value', 'confidence': "lol"},
'dictB': None, 'dictC': None, }
lists = {f"list_{k}": [v["text"], v["confidence"]] if v else [0, 0] for k, v in
nested_dict.items()}
print(lists["list_dictA"], lists["list_dictB"], lists["list_dictC"])
# output: ['ok', 'lol'] [0, 0] [0, 0]

由于要创建新变量,因此必须分配给globals().

这是为此字典执行此操作的一种方法:

for k, v in nested_dict.items():
var_name = f"list_{k}"
if v:
globals()[var_name] = [v.get("text", 0), v.get("confidence", 0)]
else: 
globals()[var_name] = [0, 0]
print (var_name) # just show the var name. Not needed. 
print(list_dictA)
==> ['ok', 'lol']
print(list_dictB)
==> [0, 0

这可以通过python的列表理解非常有效地完成:

nested_dict = { 'dictA': {'text': "ok",'useleskey':'useles_value','confidence': "lol"},
'dictB':  None, 
'dictC':  None, }
res = [[i['text'], i['confidence']] if i else [0, 0] for i in nested_dict.values()]
In [16]: res                                                                                                                                          
Out[16]: [['ok', 'lol'], [0, 0], [0, 0]]

以下是使用字典理解的方法:

nested_dict = { 'dictA': {'text': "ok",'useleskey':'useles_value','confidence': "lol"},
'dictB':  None, 
'dictC':  None, }
list_dict = {f'list_dict_{k[-1]}':[v[f] for f in v.keys() if f in ['text','confidence']] if v else [0,0] for k,v in nested_dict.items()}
print(list_dict)

输出:

{'list_dict_A': ['ok', 'lol'], 'list_dict_B': [0, 0], 'list_dict_C': [0, 0]}

既然问题提到了熊猫,我建议这样一行:

pd.DataFrame(nested_dict).T.fillna(0).assign(info=lambda df: df[["text", "confidence"]].agg(list, axis=1))
Out: 
confidence text     useleskey       info
dictA        lol   ok  useles_value  [ok, lol]
dictB          0    0             0     [0, 0]
dictC          0    0             0     [0, 0]

相关内容

  • 没有找到相关文章

最新更新