【问题标题】:Python lower case dict values before comparing 2 dicts using itemgetter使用 itemgetter 比较 2 个字典之前的 Python 小写​​字典值
【发布时间】:2021-07-05 08:49:52
【问题描述】:

我比较 2 个字典 dict1 的键和值必须在 dict2 中
问题是在 dict2 中的值是大写的,我喜欢在比较它们之前将它们小写。如果可以不循环整个 dict2 而只循环相关键

dict1 = {'version': 'fff', 'ff':1,'name_app': ['for']}
dict2 = {'version': 'FFF', 'ff':1,'name_app': ['for'], 'dir': 'c', 'path': 'cc'}
g = itemgetter(*dict1)
if(g(dict1) == g(dict2)):
    print("True")
else:
    print("False") 

在这个例子中,我喜欢只小写 dict2 中的版本键,但它可以多于 1 个键

【问题讨论】:

  • dict2 中的['for'] 也可以大写吗?
  • 暂时保留它,现在只有文字字符串值
  • 名气这么大,怎么可能写出这么烂的问题?请参阅How to Ask 以及如何创建minimal reproducible example

标签: python dictionary comparison lowercase


【解决方案1】:

试试:

from operator import itemgetter

dict1 = {"version": "fff", "ff": 1, "name_app": ["for"]}
dict2 = {
    "version": "FFF",
    "ff": 1,
    "name_app": ["for"],
    "dir": "c",
    "path": "cc",
}
g = itemgetter(*dict1)

if g(dict1) == tuple(
    map(lambda x: x.lower() if isinstance(x, str) else x, g(dict2))
):
    print("True")
else:
    print("False")

打印:

True

【讨论】:

  • 你能解释一下你在这里做了什么吗?
  • @user63898 使用g(dict2) 我从dict2 获取值并检查这些值是否为字符串。如果它们是字符串,我将它们转换为小写。然后将它们与 dict1 中的值进行比较
  • 为什么是元组?
  • @user63898 operator.itemgetter 以元组的形式返回值。所以我需要将它们作为两个元组进行比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
  • 2018-04-06
  • 2014-10-29
相关资源
最近更新 更多