首页 文章

字典:检查键和值的每个元素是否相等

提问于
浏览
0

所以我已经提取了html的源代码并将所有内容转换为大字典 .

这只是一个例子:

d = {fist:mist}

我的目标是通过索引比较字符:

(key[0] & value[0], key[1] & value[1], etc.)

并检查字符是否相等:

f != m, i == i, s==s, t==t

我能做的最好:

d = {fist:mist}

difference = 0 
no_difference = 0

for key, value in d.items():
      for char1 in key:
          pass
      for char2 in value:
          pass
      if char1 != char2:
         difference += 1
      if char1 == char2:
         no_difference +=1

 print(difference)
 print(no_difference)

我感谢任何帮助 .

编辑:非常感谢Glenn Codes,Joe Iddon和MikeMüller!

3 回答

  • 3

    您需要遍历字典中的 key : value 对 . 对于每一对,您需要确定 keyvalue 之间存在多少差异 . 这可以通过计算仅包含不同字符的 list 的长度来完成 .

    然后我们将这个长度添加到循环外的变量中以跟踪总数 .

    d = {"fist":"mist"}
    differences = 0
    for k, v in d.items():
        differences += len([i for i,c in enumerate(k) if c != v[i]])
    
    print(differences)
    

    对于这里的小例子,它给出 1 ,因为 'f''m' 是不同的 .


    如果你还想要匹配(即没有不同)的字符数,那么你可以只做相同的过程,但添加 key 的长度减去差异以获得相同的字符数:

    d = {"fist":"mist"}
    differences = 0
    same = 0
    for k, v in d.items():
        differences += len([i for i,c in enumerate(k) if c != v[i]])
        same += len(k) - differences
    
    print(differences)
    print(same)
    

    它再次给 differences 作为 1 ,但也给 same 作为 3 (对于 'i''s''t' ) .


    如果您只想要一个布尔值( True / False )来确定任何对之间是否存在任何差异,您可以在一行中执行整个操作:

    all(k == v for k,v in d.items())
    

    在这种情况下,它给出 False .

  • 1

    假设键和值的长度相同,则可以:

    for key, value in d.items():
        for i in range(len(key)):
            if key[i] == value[i]:
               no_difference +=1
            else:
               difference += 1
    
  • 1

    假设一个包含多个项目和可能不同长度的键和值的字典,这应该工作:

    from itertools import zip_longest
    
    d = {'fist': 'mist', 'fist1': 'mist22', 'x': 'many differences here'}
    
    difference = 0 
    no_difference = 0
    
    for k, v in d.items():
        for item1, item2 in zip_longest(k, v, fillvalue=''):
            if item1 == item2:
                no_difference += 1
            else:
                difference += 1
    
    print('difference:', difference)
    print('no_difference:', no_difference)
    

    输出:

    difference: 25
    no_difference: 6
    

相关问题