【问题标题】:Python Dict Comprehension to Create and Update DictionaryPython Dict 理解创建和更新字典
【发布时间】:2015-06-23 04:19:18
【问题描述】:

我有一个字典(数据)列表,并希望将其转换为字典 (x),如下所示。 我正在使用以下'for循环'来实现。

data = [{'Dept': '0123', 'Name': 'Tom'},
        {'Dept': '0123', 'Name': 'Cheryl'},
        {'Dept': '0123', 'Name': 'Raj'},
        {'Dept': '0999', 'Name': 'Tina'}]
x = {}

for i in data:
    if i['Dept'] in x:
        x[i['Dept']].append(i['Name'])
    else:
        x[i['Dept']] = [i['Name']]

Output:
x -> {'0999': ['Tina'], '0123': ['Tom', 'Cheryl', 'Raj']}

是否可以在字典理解或任何其他更pythonic的方式中实现上述逻辑?

【问题讨论】:

    标签: python dictionary append defaultdict dictionary-comprehension


    【解决方案1】:

    dict理解,即使不是不可能的,也可能不是最好的选择。我可以建议使用defaultdict (https://docs.python.org/2/library/collections.html#collections.defaultdict):

    from collections import defaultdict
    dic = defaultdict(list)
    for i in data:
        dic[i['Dept']].append(i['Name'])
    

    【讨论】:

      【解决方案2】:

      这似乎太复杂了,以至于不能包含任何重要的代码,但只是为了好玩,给你:

      {
          dept: [item['Name'] for item in data if item['Dept'] == dept]
          for dept in {item['Dept'] for item in data}
      }
      

      【讨论】:

      • 我认为它一点也不复杂。但是,从大 O 的角度来看,它的速度较慢,因为必须为找到的每个唯一键重新扫描一次数据 - 最坏情况为 O(N^2)。
      • 感谢 Underyx,这回答了我的问题并且完美运行。是的,确实需要一些时间才能理解。 :)。因此,我将采用@Julien Spronck 的建议。
      猜你喜欢
      • 2017-10-05
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多