【问题标题】:Append to list in python dict comprehension追加到python dict理解中的列表
【发布时间】:2022-01-18 23:39:19
【问题描述】:

假设我们有一本字典 inp = {"virat":60,"rohit":50,"sardhul":50,"rana":60} 和 我们应该得到{60: ['virat', 'rana'], 50: ['rohit', 'sardhul']}的输出

我可以在正常的python编程中做到如下

    out = dict()
    for key, val in inp.items():
        if val not in out:
            out[val] = [key]
        else:
            out[val].append(key)

输出为{60: ['virat', 'rana'], 50: ['rohit', 'sardhul']}

我们如何在字典理解中做同样的事情?

【问题讨论】:

  • 在这种情况下,作为理解的解决方案不会有效,为什么会有这种约束?
  • 你可以使用collections.defaultdict,所以你不需要if else

标签: python python-3.x list dictionary dictionary-comprehension


【解决方案1】:

一种更复杂的方法:

out = {}
for key, val in inp.items():
    out.setdefault(val, []).append(key)

【讨论】:

    【解决方案2】:

    正如其他人所说,它效率不高,但如果你必须有一个理解:

    { val: [ key for key,vv in inp.items() if vv == val ] for val in inp.values() }
    

    这基本上相当于:

    out = dict()
    for val in inp.value():
        tmp = list()
        for key,vv in inp.items():
            if vv == val:
                tmp.append(key)
        out[val] = tmp
    

    ...这比您的原始代码效率低很多。

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 2017-09-23
      • 2021-11-24
      • 1970-01-01
      相关资源
      最近更新 更多