我正在使用 Python 开发一种算法,该算法将接受用户输入并告诉他们需要将哪些新字母添加到字符串中以使其成为不同的字符串,并且我一直在尝试使用Counter 方法创建的字典。
我想比较两个不同的字典,它们计算字符串中的字母(比如使用集合模块中的计数器工具返回的对象)。我们可以称这些字典为 D1 和 D2。我希望有两个结果字典(R1 和 R2),第一个是两者之间的共享字母,第二个是将 R1 变成 R2 所需的字母(D2 中但不在 D1 中的字母)。
例如:
# assuming they’ve been converted from counter objects into regular
dictionaries #
D1 = {‘A’: 2, ‘B’: 1, ‘C’: 4, ‘D’: 5}
D2 = {‘A’: 3, ‘B’: 4, ‘C’ : 4, ‘D’: 7}
# Some sort of comparison function executed here #
结果:
R1={‘A’: 2, ‘B’: 3, ‘C’: 4, ‘D’: 5}
R2 = {‘A’: 1, ‘B’: 1, ‘C’: 0 , ‘D’: 2}
最佳答案
如果共享字母是指计数器交集,则可以使用 &
运算符和将 R1
转换为 R2
所需的字母数量> 可以看作是区别:
from collections import Counter
D1 = Counter({'A': 2, 'B': 1, 'C': 4, 'D': 5})
D2 = Counter({'A': 3, 'B': 4, 'C': 4, 'D': 7})
R1 = D1 & D2
print(R1) # intersection: min(c[x], d[x])
print(D2 - D1) # subtract (keeping only positive counts)
输出
Counter({'D': 5, 'C': 4, 'A': 2, 'B': 1})
Counter({'B': 3, 'D': 2, 'A': 1})
如果你想保留负数,你可以这样做:
from collections import Counter
D1 = Counter({'A': 2, 'B': 1, 'C': 4, 'D': 5, 'E': 5})
D2 = Counter({'A': 3, 'B': 4, 'C': 4, 'D': 7, 'E': 3})
R2 = Counter({key: D2.get(key, 0) - value for key, value in D1.items()})
print(R2)
输出
Counter({'B': 3, 'D': 2, 'A': 1, 'C': 0, 'E': -2})
在上面的例子中 'E' : -2
因为 E
在 D1
中的计数是 5
和 D2
中的 3
。 注意:所有示例均使用 Python 3.5。
关于python - 比较两个不同的 python 计数器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52323957/