Python 如何删除保留在另一个str中的dict对象(字母)?

Python 如何删除保留在另一个str中的dict对象(字母)?,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,假设我有这本字典: x = {'a':2, 'b':5, 'g':7, 'a':3, 'h':8}` 这个输入字符串: y = 'agb' 我想删除出现在y中的x键,例如,如果我的输入如上所述,则输出应为: {'h':8, 'a':3} 我目前的代码如下: def x_remove(x,word): x1 = x.copy() # copy the input dict for i in word: # iterate all the letters in str

假设我有这本字典:

x = {'a':2, 'b':5, 'g':7, 'a':3, 'h':8}`
这个输入字符串:

y = 'agb'
我想删除出现在
y
中的
x
键,例如,如果我的输入如上所述,则输出应为:

{'h':8, 'a':3}
我目前的代码如下:

def x_remove(x,word):
   x1 = x.copy()   # copy the input dict
      for i in word:   # iterate all the letters in str           
          if i in x1.keys():
              del x1[i]    
   return x1
但当代码运行时,它会删除所有现有的键,就像word中的字母一样。但我想,虽然有许多键类似于word中的字母,但它只删除一个键,而不是每个键


这是我的错,我可能理解了,但请解释一下,我如何在不使用del函数的情况下做到这一点

def x_remove(input_dict, word):
    output_dict = input_dict.copy()

    for letter in word:        
        if letter in output_dict:
            del output_dict[letter]

    return output_dict
例如:

In [10]: x_remove({'a': 1, 'b': 2, 'c':3}, 'ac')
Out[10]: {'b': 2}
一个问题是你的缩进。缩进在Python中很重要,使用方式是
{
}
是用其他语言编写的。另一个是你检查是否每个字母都在列表中的方式;您需要
if-letter in-output\u dict
,因为
in
dict()上搜索键

当使用描述性变量名时,更容易看到发生了什么

我们还可以完全跳过
del
,并使用以下方法使其更具python风格:

这仍然会隐式地创建列表的浅层副本(不包含删除的元素)并返回它。这也会更有效


如注释所述,字典中的所有键都是唯一的。只能有一个名为
'a'
b

的键。字典必须具有唯一的键。您可以使用元组列表代替数据

x=[('a',2),('b',5),('g',7),('a',3),('h',8)]

然后,以下代码删除所需的条目:

for letter in y:
    idx = 0
    for item in x.copy():   
        if item[0] == letter:
            del x[idx]
            break
        idx += 1
结果:

>>> x
[('a', 3), ('h', 8)]

您还可以实现

def remove_(x,y)
    for i in y:
        try:
           del x[i]
        except:
           pass
    return x
输入
x={'a':1,'b':2,'c':3}
y='ac'

输出

{'b': 2}

您的字典中有重复的键
x
Dicts不允许重复键。毕竟,如果键
'a'
有两个条目,那么
x['a']
会是什么呢?另外,在某些dict.keys()中永远不要做
事情。这将构建一个键列表,并在列表中进行缓慢的线性搜索以查找元素。在某些情况下,请始终使用
thing
。您的代码的行为符合预期(尽管其行为可能与您预期的不同)。由于字典不能有重复的键开始,你最终得到的是
{'h':8}
。谢谢你的答案。没问题,很高兴能提供帮助!
{'b': 2}