【问题标题】:List Comprehension in a dict.fromkeys(SetA, ...)dict.fromkeys(SetA, ...) 中的列表理解
【发布时间】:2014-02-12 23:17:45
【问题描述】:

我想使用预先存在的信息生成一个新字典。使用dict.fromkeys() 传递参数,例如DictA.keys()set()DictA.values(),但是,这就是我遇到的问题:

NewDictFromKeys = dict.fromkeys(set(DictA.keys()), DictA.values())

但是传递DictA.values() 是逻辑它会返回这个:

{'pnrdshfxgjltmqacbvuek': [10, 5, 14, 9, 7, 6, 1, 2, 4, 8, 12, 11, 13, 3],   'prktahjvqcgfsbuxdlemn': [10, 5, 14, 9, 7, 6, 1, 2, 4, 8, 12, 11, 13, 3], ...
 ... }

等等。

问题是:为每个键分配一个与其自身对应的值。我提到列表理解是因为它可能是一个很好的解决方案,但如何应用是另一个问题。

【问题讨论】:

    标签: python python-2.7 dictionary list-comprehension


    【解决方案1】:

    还可以考虑使用字典推导来修改当前字典,例如:

    {k:v+data for k,v in DictA.items()}
    

    或者只是:

    d = {}
    for k,v in DictA.items():
        d[k] = manipulate(v)
    

    【讨论】:

      【解决方案2】:

      这是因为dict.fromkeys() 为所有值重用了第二个参数。您一遍又一遍地存储相同的列表作为参考。

      改用字典推导:

      {k: DictA.values() for k in DictA}
      

      字典推导式中的左侧键和值表达式在每次迭代时都会执行。每次再次调用DictA.values(),都会产生一个新的列表对象。

      注意这里不需要调用set(DictA),你可以直接遍历DictA所有的键,而且它们已经是唯一的了(它们必须是唯一的)。 p>

      【讨论】:

      • 有趣的 Martijn,但它在我的代码中看起来如何?你能解释一下吗?
      • @NiceGuy:对不起,我不确定我是否关注你。我已经给了你一个样品; DictA 是你的字典,字典理解生成一个新字典,其键与 DictA 相同,每个值都是来自 DictA 的完整值列表。
      • Martijn Pieters,我将尝试向您传递使用 set 的含义。事实上,我有两个字典:DictA 和 DictB。从这些字典中,我为每个字典创建了一个新的 var 来保存它们的一组键。之后,我会像这样在两组之间进行交集:Intersected = SetDictA & SetDictB。那个交叉点的结果就是我需要的。然后我会传递给dict.fromkeys(Intersected, "Comment: And then do some thinng here to assign the correspondent value to the keys in Intersected"。这就是我在上面的问题中使用 Set 的原因。
      • @NiceGuy:对,你可以使用字典视图(基本上是集合)。 DictA.viewkeys() & DictB 为您提供键的交集。
      猜你喜欢
      • 2020-09-19
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多