【问题标题】:python two dictionaries into one? mixed up keys and valuespython 两个字典合二为一?混合键和值
【发布时间】:2013-07-22 01:15:29
【问题描述】:

对于 d1 中的每个条目 (a, b),我有两个字典,d1 和 d2,如果 a 不是 d2 的键,则将 (a,b) 添加到每个条目的新字典中 (a, b) 在 d2 中,如果 a 不是 d1 的键(即不是 d1 中的 a),则将 (a,b) 添加到新字典 示例 if d1 is {2:3, 8:19, 6:4, 5 :12} 并且 d2 是 {2:5, 4:3, 3:9},那么新字典应该是 {8:19, 6:4, 5:12, 4:3, 3:9}。到目前为止,这是我的代码。

d3 = {}
for i in d1.items():
    if i[1] not  in d2.keys():
        d3[i[0]] = d2[i[1]]

【问题讨论】:

    标签: python loops dictionary key


    【解决方案1】:

    如果您使用的是 Python 2.7,则可以获取每个 dict 的键视图,进行对称差分,然后从具有该键的 dict 中为每个键选择值:

    result = {key: d1[key] if key in d1 else d2[key]
              for key in d1.viewkeys() ^ d2.viewkeys()}
    

    在 Python 3.x 中,几乎相同,除了 viewkeys 只是 keys

    result = {key: d1[key] if key in d1 else d2[key]
              for key in d1.keys() ^ d2.keys()}
    

    在 2.7 之前,没有 dict 视图或 dict 理解,但您可以将 sets 和 dict 构造函数与生成器表达式一起使用:

    result = dict((key, d1[key] if key in d1 else d2[key])
                  for key in set(d1).symmetric_difference(d2))
    

    【讨论】:

    • set(d1).symmetric_difference(s2) 会这样做 - 但无论如何在 2.7 之前也没有 dict-comp ;)
    • @JonClements:对。实际上,我正要检查那些进入的时间;不知何故,我以为是 2.6。
    【解决方案2】:
    >>> d1={2:3, 8:19, 6:4, 5:12}
    >>> d2={2:5, 4:3, 3:9}
    >>> d12 = {k:v for k,v in d1.items() if k not in d2}
    >>> d21 = {k:v for k,v in d2.items() if k not in d1}
    >>> answer = {k:v for k,v in itertools.chain(d12.items(), d21.items())}
    >>> answer
    {8: 19, 3: 9, 4: 3, 5: 12, 6: 4}
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      • 2015-04-23
      • 2022-12-12
      • 1970-01-01
      • 2019-05-15
      • 2023-03-18
      相关资源
      最近更新 更多