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}