【问题标题】:Operations with multiple dicts具有多个 dicts 的操作
【发布时间】:2016-10-04 19:39:50
【问题描述】:

主要问题是如何正确迭代/指示才能使用两个字典? 我已经给出了两个字典(d1, d2),我必须进行比较。如果两者中的键 i 相同,则由于给定功能而执行操作。结果进入另一个字典(dict1)。如果任一d1 or d2 包含密钥i,则该值进入dict2。返回是tup = (dict1, dict2)。这是一个例子。

If f(a, b) returns a + b
d1 = {1:30, 2:20, 3:30, 5:80}
d2 = {1:40, 2:50, 3:60, 4:70, 6:90}
then dict_interdiff(d1, d2) returns ({1: 70, 2: 70, 3: 90}, {4: 70, 5: 80, 6: 90})

我正在努力寻找正确指示两个字典 d1 和 d2 的正确方法。这是我的代码:

def h(a, b):
    return a > b    

d2 = {1:40, 2:50, 3:60, 4:70, 6:90}
d1 = {1:30, 2:20, 3:30, 5:80}

def dict_interdiff(d1, d2):
    dict1 = {}
    dict2 = {}
    for i in d1:
        if i in d1 #and d2:
            dict1[i] = h(d1[i], d2[i])
        else:
            dict[i] = d1[i] #or d2[i]      
    tup = (dict1, dict2)
    return tup

我是否必须遍历 d1 和 d2 (for i in d1 and d2:)?似乎我必须以某种方式整合两个给定的字典才能使 for 循环工作。

感谢任何提示!

【问题讨论】:

  • if i in d1 - 这永远是真的。仔细想想你的 if 语句在做什么。
  • for i in set(itertools.chain(d1, d2)) 将为您提供 d1 中的每个键和 d2 中的每个键中的一个。没有重复

标签: python dictionary iteration


【解决方案1】:
import itertools
def interdict(d1,d2): 
    dict1 = {}
    dict2 = {}
    for i in set(itertools.chain(d1, d2)):
        if i in d1 and i in d2:
            #whatever
        elif i in d1:
            #not in d2
        else:
            #not in d1

set 删除重复项。 itertools.chain 结合字典中的两个键列表

【讨论】:

    【解决方案2】:

    使用itertools.chain 获取dicts 中所有键的可迭代对象。

    from itertools import chain
    
    def h(a, b):
        return a > b
    
    d2 = {1:40, 2:50, 3:60, 4:70, 6:90}
    d1 = {1:30, 2:20, 3:30, 5:80}
    
    def dict_interdiff(d1, d2):
        dict1 = {}
        dict2 = {}
        for key in set(chain(d1, d2)):
            if key in d1 and key in d2:
                dict1[key] = h(d1[key], d2[key])
            else:
                dict2[key] = d1.get(key) or d2.get(key)
        return dict1, dict2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2013-06-01
      • 2021-03-02
      相关资源
      最近更新 更多