Как сравнить две строки, игнорируя два индекса через python или регулярное выражение - PullRequest
0 голосов
/ 08 февраля 2020

Язык: Python 3.

Мне очень интересно узнать, как сравнивать приведенные ниже строки, игнорируя значение объекта "DateandTime", поскольку оно никогда не будет прежним , Следовательно, это единственное, что следует игнорировать во время сравнения.

Str1='''{"Name":"Denu","Contact":12345678, "DateandTime":20200207202019}'''

Str2= '''{"Name":"Denu","Contact":12345678, "DateandTime":20200207220360}'''

Любая помощь действительно будет оценена.

Ответы [ 3 ]

3 голосов
/ 08 февраля 2020

Вы можете проверить, равны ли all клавиши , за исключением той, которая вас не волнует:

def eq(d1, d2):
    keys = set(d1.keys())
    keys.update(d2.keys())
    return all(d1.get(k) == d2.get(k) for k in keys if k != "DateandTime")

d1 = {"Name": "Denu", "Contact": 12345678, "DateandTime": 20200207202019}
d2 = {"Name": "Denu", "Contact": 12345678, "DateandTime": 20200207220360}

print(eq(d1, d2))

Эта печать True.

3 голосов
/ 08 февраля 2020

Вы можете легко создать идентичную функцию, используя в первую очередь диктовку. Не конвертируйте его в строку, поскольку он уже является пригодным для использования объектом.

Str1 = {"Name":"Denu","Contact":12345678, "DateandTime":20200207202019}
Str2 = {"Name":"Denu", "Contact":12345678, "DateandTime":20200207220360}

def isidentical(dct1, dct2):
    """ Compares two dicts for equality """

    ignore = ["DateandTime"]

    keys1 = set(key for key in dct1 if not key in ignore)
    keys2 = set(key for key in dct2 if not key in ignore)

    if keys1 != keys2:
        return False

    for key in keys1:
        if dct1[key] != dct2[key]:
            return False
    return True

x = isidentical(Str1, Str2)
print(x)
# True in this case

Это приведет к ошибке, если в одном словаре есть другие ключи, чем в другом, или если значения не идентичны. Очевидно, вы можете расширить список ignore.

2 голосов
/ 08 февраля 2020

Вы можете сравнить значения обоих словарей с функцией ниже:

def compare(a,b):
  keys = list(a.keys())
  values = list(a.values())
  comp = dict(zip(keys,values))

  for i in range(len(a)):
    if a[keys[i]] == b[keys[i]]:
      comp[keys[i]] = True
    else:
      comp[keys[i]] = False

  return comp
...