字典将“ None”替换为值嵌套字典

时间:2020-06-23 14:21:29

标签: python pandas list

我有一本这样的字典:

localStorage

每个字典都可以填充(例如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

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

list_dict_B=[0, 0]

5 个答案:

答案 0 :(得分:2)

由于要创建新变量,因此必须分配给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

答案 1 :(得分:2)

您可以使用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]

答案 2 :(得分:2)

使用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]]

答案 3 :(得分:1)

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

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]}

答案 4 :(得分:1)

由于该问题提到了熊猫,所以我建议使用这一行:

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]