首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将字典与Python 3+中的函数进行比较

如何将字典与Python 3+中的函数进行比较
EN

Stack Overflow用户
提问于 2020-10-31 01:28:34
回答 3查看 82关注 0票数 0

我想把字典和函数内部的精确模式进行比较。我的最终目标是:

当两个字典具有相同的键时,value

  • Decrementing

  • 递增3,如果值不是相同的

  • 0,则将变量增加-1,如果没有一对键/值,则为

例如:

代码语言:javascript
运行
复制
dict1 = {"EX1": "C", "EX2": "D", "EX4": "A", "EX5": "A"}
dict2 = {"EX1": "C", "EX2": "A", "EX3": "A", "EX4": "A", "EX5": "A"}

预期产出:

8

8因为:-The EX1键在两个字典中具有相同的值(3)

-The EX2键在两个字典中没有相同的值(3-1=2)

-The EX3键不存在于dict1中,因此没有操作(2)

-The EX4键在两个字典(2+3=5)中具有相同的值。

-The EX5键在两个字典(5+3=8)中具有相同的值。

我从互联网上得到了两个我不知道如何转换成函数的片段,我不知道这些是否有用:

代码语言:javascript
运行
复制
{k : dict1[k] for k in dict1 if k in rep_valid and dict1[k] == rep_valid[k]} #Get same items
{k : dict2[k] for k in set(dict2) - set(dict1)} #Get difference
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-31 01:36:00

你可以使用列表理解来得到答案:

代码语言:javascript
运行
复制
dict1 = {"EX1": "C", "EX2": "D", "EX4": "A", "EX5": "A"}
dict2 = {"EX1": "C", "EX2": "A", "EX3": "A", "EX4": "A", "EX5": "A"}

# (count matching keys)*3 - (count not matching keys)
ttl = len([k for k in dict1 if k in dict2 and dict1[k]==dict2[k]]) * 3 - len([k for k in dict1 if k in dict2 and dict1[k]!=dict2[k]])

print(ttl)  # 8
票数 1
EN

Stack Overflow用户

发布于 2020-10-31 11:11:22

您可以使用以下函数,它也支持嵌套字典:

代码语言:javascript
运行
复制
def is_dict_equal(d1, d2):
    # for each key in d1
    for key in d1.keys():
        # check if d2 also has the key
        if key not in d2:
            return False

        value1 = d1.get[key]
        value2 = d2.get[key]
        if isinstance(value1, dict): # if the value is another dictionary call this function again
            if not is_dict_equal(value1, value2):
                return False
        elif value1 != value2: # else just compare them with eachother
            return False

    # check for keys in d2 but not in d1
    for key in d2.keys():
        if key not in d1:
            return False

    return True
票数 1
EN

Stack Overflow用户

发布于 2020-10-31 11:00:47

代码语言:javascript
运行
复制
count = 0
for key in (set(dict1.keys()) & set(dict2.keys())):
    if dict1.get(key) == dict2.get(key):
        count += 3
    else:
        count -= 1
print(f"count = {count}")

#count = 8
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64617593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档