【问题标题】:Convert ordered dictionary to different format将有序字典转换为不同的格式
【发布时间】:2020-07-05 19:24:25
【问题描述】:

我需要将给定的有序字典列表转换为不同的格式,并且时间复杂度最小。重现示例代码:

import csv
from collections import OrderedDict

list_of_dicts = [OrderedDict([('key_a','value_a'),('key_b','value_b')]), 
                 OrderedDict([('key_a','value_c'),('key_b','value_d')]),
                 OrderedDict([('key_a','value_e'),('key_b','value_f')])]

需要将以上内容转换为以下内容(不使用 EXPLICIT FOR LOOP):

convertedDictionary = [OrderedDict([('value_a','value_b')]),
                       OrderedDict([('value_c','value_d')]),
                       OrderedDict([('value_e','value_f')])]

【问题讨论】:

    标签: python list csv dictionary


    【解决方案1】:

    第一步:获取列表:足够简单地将dict.values 映射到字典:

    >>> list(map(dict.values,list_of_dicts))
    [['value_a', 'value_b'], ['value_c', 'value_d'], ['value_e', 'value_f']]
    

    现在对于最终结果,没有循环,唯一的选择是 maplambda 但它很难看

    >>> list(map(lambda x : OrderedDict((x,)),map(dict.values,list_of_dicts)))
    [OrderedDict([('value_a', 'value_b')]),
     OrderedDict([('value_c', 'value_d')]),
     OrderedDict([('value_e', 'value_f')])]
    

    使用外部列表理解更好(并且可能更快):

    [OrderedDict((x,)) for x in map(dict.values,list_of_dicts)]
    

    注意:如果每个字典只有 1 个值,为什么要使用 OrderedDict?为什么每个字典只存储一个值?除非这是一个初始化步骤,否则数据模型看起来很可疑。

    【讨论】:

    • 嘿@Jean 感谢您的回答.. 如果我在所有字典中都有“Key_c”怎么办。该方法在那里不起作用。我想忽略 key_c 和 value_c。
    • 那么请提出另一个问题(不要编辑那个)。我可以更改我的答案,但我无法回答这样的后续问题。
    猜你喜欢
    • 1970-01-01
    • 2021-08-21
    • 2023-03-10
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2011-11-12
    相关资源
    最近更新 更多