【问题标题】:Divide the values of two dictionaries in python在python中将两个字典的值相除
【发布时间】:2016-12-05 15:27:43
【问题描述】:

我有两个具有相同键的字典,我想对值进行除法以更新或创建一个新字典,保持键不变,并将商作为每个键的新值。

d1 = { 'a':12 , 'b':10 , 'c':2 }
d2 = { 'a':0 , 'c':2 , 'b':5}
d3 = d2 / d1

d3 = { 'a':0 , 'b':0.5 , 'c':1 }

除了遍历键、值对并创建值的有序列表,然后进行划分之外,我不知道该怎么做。我希望有一个更优雅的解决方案。

【问题讨论】:

    标签: python dictionary division


    【解决方案1】:

    使用视图键(python2.7):

    {k: float(d2[k])/d1[k] for k in d1.viewkeys() & d2}
    

    在 python 3 中也是如此(我们可以完全放弃 float() 调用):

    {k: d2[k]/d1[k] for k in d1.keys() & d2}
    

    是的,我在这里使用了一个关键交叉点;如果您绝对确定您的密钥在两者中相同,请使用d2

    {k: float(d2[k])/d1[k] for k in d2}
    

    为了完整起见,在 Python 2.6 和之前的版本中,您必须使用带有生成器表达式的 dict() 构造函数来实现相同的效果:

    dict((k, float(d2[k])/d1[k]) for k in d2)
    

    生成一系列键值元组。

    【讨论】:

    • key 交集不是必须的,OP 声明 2 dicts 有相同的键
    • @jamylak:比抱歉更安全? :-P
    • 请注意,float 调用在 Python 3 中不是必需的,d1.keys() & d2.keys() 可以写为 d1.keys() & d2
    • @vaultah:啊,是的,当然。也不需要d2.viewkeys() 调用。
    【解决方案2】:
    d1 = { 'a':12 , 'b':10 , 'c':2 }
    d2 = { 'a':0 , 'c':2 , 'b':5}
    d3={x:float(d2[x])/d1[x] for x in d1}
    print d3
    

    输出:

    {'a': 0.0, 'c': 1.0, 'b': 0.5}
    

    【讨论】:

    • @Thrustmaster:这叫做字典理解;在 python 2.7 中引入:PEP 274.
    • @MartijnPieters:太棒了!谢谢:)
    【解决方案3】:

    这适用于所有 python,但是如果有 Py 2.7+,我会推荐 @MartijnPieters 的解决方案

    >>> d1 = { 'a':12 , 'b':10 , 'c':2 }
    >>> d2 = { 'a':0 , 'c':2 , 'b':5}
    >>> d3 = dict((k, float(d2[k]) / d1[k]) for k in d2)
    >>> d3
    {'a': 0.0, 'c': 1.0, 'b': 0.5}
    

    【讨论】:

      【解决方案4】:

      在 3.2 中,您使用 .keys() 方法和 .get(key)。 http://www.tutorialspoint.com/python/python_dictionary.htm

      【讨论】:

      • .get(key) 如果未定义密钥,则返回 None。虽然如果你循环访问 .keys() 总是会这样,但这确实意味着 .get(key) 比普通项目访问 (d1[key]) 慢。
      猜你喜欢
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 2022-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      相关资源
      最近更新 更多