【问题标题】:Dict - If more than one value per key, extract the last elementDict - 如果每个键有多个值,则提取最后一个元素
【发布时间】:2019-09-04 07:33:48
【问题描述】:

我有一个如下所示的字典(虽然有 150 万多对):

{'key1' : 10,
'key2' : 20,
'key3' : [30,40],
'key4' : 50,
'key5' : [60,70,80],
'key6' : 90}

我的 99% 的键都有一个值,但是对于具有值数组的键.. 我想返回最后一个元素。

所以我得到的 dict 会变平且独特;

 {'key1' : 10,
'key2' : 20,
'key3' : 40,
'key4' : 50,
'key5' : 80,
'key6' : 90}

根据我的搜索,我认为列表理解可能是最好的方法,但我只是不确定如何去做。特别是因为并非每个键都包含相同的数据类型。

谢谢

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    一个简单的dict理解就可以了:

    d = {'key1': 10,
         'key2': 20,
         'key3': [30, 40],
         'key4': 50,
         'key5': [60, 70, 80],
         'key6': 90}
    
    d = {k: v if not isinstance(v, list) else v[-1] for k, v in d.items()}
    #        ^ if v is not a list taking v as it, otherwise taking the last element
    print(d)
    

    输出

    {'key1': 10, 'key2': 20, 'key3': 40, 'key4': 50, 'key5': 80, 'key6': 90}
    

    当然反过来也可以:

    d = {k: v[-1] if isinstance(v, list) else v for k, v in d.items()}
    

    【讨论】:

    • 仅供参考,以防万一有人需要它 - 我的列表是实际的 numpy 数组,所以我不得不将其更改为 {k: v if not isinstance(v, np.ndarray) else v[-1] for k, v in d.items()}
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多