Python 字典将“无”替换为嵌套字典中的值
我有一本这样的字典:Python 字典将“无”替换为嵌套字典中的值,python,pandas,list,Python,Pandas,List,我有一本这样的字典: nested_dict = { 'dictA': {'text': "ok",'useleskey':'useles_value','confidence': "lol"}, 'dictB': None, 'dictC': None, } list_dict_A= [nested_dict["dictA"]["text"]
nested_dict = { 'dictA': {'text': "ok",'useleskey':'useles_value','confidence': "lol"},
'dictB': None,
'dictC': None, }
list_dict_A= [nested_dict["dictA"]["text"], nested_dict["dictA"]["confidence"]]
每一本字典都可以像格言一样填写,也可以一文不值
我想为每本词典创建一个新列表,以总结我能获得的重要信息
非空字典的伪代码如下所示:
nested_dict = { 'dictA': {'text': "ok",'useleskey':'useles_value','confidence': "lol"},
'dictB': None,
'dictC': None, }
list_dict_A= [nested_dict["dictA"]["text"], nested_dict["dictA"]["confidence"]]
如果字典没有,那么我想创建以下列表
list_dict_B=[0, 0]
因此,在本例中,预期结果将是3个具有以下值的列表:
list_dict_A=["ok", "lol"]
list_dict_B=[0, 0]
list_dict_C=[0, 0]
由于要创建新变量,必须将其分配给全局变量 这里有一种方法可以为这本词典做到这一点:
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
您可以使用dict理解来完成:
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]
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)
通过对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, }
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]
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.DataFramenested_dict.T.fillna0.assigninfo=lambda-df:df[[text,confidence]]。aggrest,axis=1 输出: 信任文本useleskey信息 dictA lol ok useles_值[ok,lol] dictb0[0,0] dictc0[0,0]
这可以通过迭代嵌套的_dict键来轻松完成,并基于该值将相应的结果添加到列表中。