将字符串的字符与字典python

时间:2017-02-11 00:56:53

标签: python dictionary

目前正在进行任务并且有点卡住。寻求一些帮助来解决这个问题。我试图尝试一个功能,它将两个值作为用户输入的杂志和赎金。如果可以在杂志中找到赎金中的字符我想要返回它是否属实,否则如果在杂志字符串中找不到赎金字符串则返回false。赎金分为字典{key,vaue},例如用户输入:

输入杂志:你好

输入赎金:你好

{' h':1,':1,' l':2,' o':1}

{' h':1,':1,' l':1,' o':1}

这应该返回true,但它返回false,因为它不计算第二个' l'在'你好'。我做错了什么?

def compare(magazine, ransom):
matches = {}
for ch in ransom:
    if ch in magazine:
        if ch in matches:
            matches[ch] += 1
        else:
            matches[ch] = 1

if ransom in matches:
    return True
else:
    return False

1 个答案:

答案 0 :(得分:1)

  

如果匹配中有赎金:

首先,这种比较看似错误,赎金应该是一个由用户输入的字符串,匹配应该是字典。

在您的代码中:

ransom: 'hello'
matches: {'h': 1, 'e': 1, 'l': 2, 'o': 1}

所以你的if条件就像:

if 'hello' in {'h': 1, 'e': 1, 'l': 2, 'o': 1}:
    # this line will not be executed

应该是这样的:

if 'h' in {'h': 1, 'e': 1, 'l': 2, 'o': 1}:
    # this line will be executed

比较这个的好方法:

# 1. Processing ransom 
{'h': 1, 'e': 1, 'l': 2, 'o': 1}
# 2. Processing magazine
{'h': 2, 'e': 3, 'l': 2, 'o': 1}
# 3. Comparing each character and counts of both one by one in a for-loop
  

赎金分为字典{key,vaue}

注意:这种假设的方式可能是错误的。字典比较将忽略字符串的顺序,并且比较字符逐个计数而没有顺序。

# Those examples could give unexpected answers
compare('hello there', 'olleh')
compare('hello there', 'olleeeh')