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

问题描述 投票:0回答:3

所以我已经提取了一个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!

python-3.x dictionary key-value
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')。


如果你只想要一个boolean(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
© www.soinside.com 2019 - 2024. All rights reserved.