【问题标题】:list to dictionary with multiple values per key列出每个键具有多个值的字典
【发布时间】:2012-08-24 17:44:31
【问题描述】:

我有一个包含键/值对的 Python 列表:

list = [ {'A': {'value': '2h25m'}, 'B': {'value': '2:45 AM'}, 
          'C': {'value': 'LAX'}, 'D': {'value': '+0100'}} ]

我想将列表转换成这样的字典:

d = {'A': '2h25m', 'B': '2:45 AM', 'C': 'LAX', 'D':'+0100'}

感谢

【问题讨论】:

    标签: python list dictionary type-conversion


    【解决方案1】:
    lst = [ {'A': {'value': '2h25m'}, 'B': {'value': '2:45 AM'}, 'C': {'value': 'LAX'}, 'D': {'value': '+0100'}} ]
    my_dict = dict([(k, v['value']) for k, v in lst[0].items()])
    

    首先,不要使用list 作为变量名,因为它会影响内置的list() 函数。此外,如您所见,我使用列表推导构建了一个包含 (key, value) 元组的列表,然后可以将其传递给 dict() 函数以创建所需的字典。

    正如 mgilson 指出的那样,您还可以使用生成器表达式而不是列表推导式:

    lst = [ {'A': {'value': '2h25m'}, 'B': {'value': '2:45 AM'}, 'C': {'value': 'LAX'}, 'D': {'value': '+0100'}} ]
    my_dict = dict((k, v['value']) for k, v in lst[0].items())
    

    【讨论】:

    • 如果您愿意,可以将列表推导式更改为生成器表达式。在这种情况下,差异可能很小,但这似乎仍然是一种很好的做法。
    • 在 Python 3 中,您可以使用 dict 理解:my_dict = {k: v['value'] for k, v in lst[0].items()}
    • 其实my_dict = {k: v['value'] for k, v in lst[0].items()}在python 2.7及以上版本中可以做到。
    【解决方案2】:

    您可以在更高版本的 Python 中使用dict comprehension:

    In [30]: lst = [ {'A': {'value': '2h25m'}, 'B': {'value': '2:45 AM'}, 
        ...:           'C': {'value': 'LAX'}, 'D': {'value': '+0100'}} ]
    
    In [31]: {k: v['value'] for k, v in lst[0].items()}
    Out[31]: {'A': '2h25m', 'B': '2:45 AM', 'C': 'LAX', 'D': '+0100'}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      • 2021-08-23
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多