Python:编辑字典键 - 使用 Strip 方法
Python: Editing Dictionary Keys - Using Strip Method
我有一个字典,如下所示:
Dict = {' Chicago ': 4, ' Washington ': 9, ' LA ': 26, ' Boston ': 12, ' Seattle ': 2}
我想编辑每个条目的键,而不是值。您可以看到的键有一个字符串,其开头和结尾包含白色space:' Chicago ', ' Washington ', ' LA '.
我想分组并从键上去除白色 space。给我留下以下字典。
Dict = {'Chicago': 4, 'Washington': 9, 'LA': 26, 'Boston': 12, 'Seattle': 2}
我该怎么做?也许使用 replace(" ", "")
方法或 strip()
?
尝试剥离方法时出现错误:
AttributeError: 'int' object has no attribute 'strip'
最简单的方法是:
Dict2 = {}
for key in Dict:
Dict2[key.strip()] = Dict[key]
Dict = Dict2
或者你可以使用理解来缓解它:
Dict = {key.strip():value for (key,value) in Dict}
使用dict
理解:
- 顺便说一下,不要使用 python 数据类型作为变量的名称(例如
Dict
)
- Dict Comprehension
- 在字典循环时,
key
和对应的value
可以用.items()
的方法同时检索
.strip
仅在 key
data = {' Chicago ': 4, ' Washington ': 9, ' LA ': 26, ' Boston ': 12, ' Seattle ': 2}
data = {k.strip(): v for (k, v) in data.items()}
>>> {'Chicago': 4, 'Washington': 9, 'LA': 26, 'Boston': 12, 'Seattle': 2}
您的错误表明您尝试转换值而不是键,但无论如何,这应该有效:
new_dict = {key.strip(): value for key, value in old_dict.items()}
我认为最简单的方法是循环按键,如下所示。我一路评论了代码。
#Your dictionary
dict = {' Chicago ': 4, ' Washington ': 9, ' LA ': 26, ' Boston ': 12, ' Seattle ': 2}
#Puts all keys of the dictionary into a list
keys = list(dict)
#iterates over dictionary keys
for key in keys:
#for every key, we make a new dictionary item with the 'stripped' key and remove the old one
dict[key.strip()] = dict[key]
del dict[key]
print(dict)
这为我们提供了相同的字典和相同的值,但从键中删除了 leading/trailing 空格:
{'Chicago': 4, 'Washington': 9, 'LA': 26, 'Boston': 12, 'Seattle': 2}
您不能直接编辑键,因为字典是哈希表。更改密钥会更改其哈希值,因此您有两个概念上的选择。
首先是替换整个字典,我觉得比较pythonic:
dct = {k.strip(): v for k, v in dct.items()}
或者:
dct = {k.strip(): dct[k] for k in dct}
第二个选项是保留相同的字典对象,但一个一个地替换映射。由于在遍历字典时不应该修改键,尤其是删除键,所以这很复杂。您必须首先制作原始密钥的单独副本并使用它:
for k in list(dct):
v = dct.pop(k)
dct[k.strip()] = v
我有一个字典,如下所示:
Dict = {' Chicago ': 4, ' Washington ': 9, ' LA ': 26, ' Boston ': 12, ' Seattle ': 2}
我想编辑每个条目的键,而不是值。您可以看到的键有一个字符串,其开头和结尾包含白色space:' Chicago ', ' Washington ', ' LA '.
我想分组并从键上去除白色 space。给我留下以下字典。
Dict = {'Chicago': 4, 'Washington': 9, 'LA': 26, 'Boston': 12, 'Seattle': 2}
我该怎么做?也许使用 replace(" ", "")
方法或 strip()
?
尝试剥离方法时出现错误:
AttributeError: 'int' object has no attribute 'strip'
最简单的方法是:
Dict2 = {}
for key in Dict:
Dict2[key.strip()] = Dict[key]
Dict = Dict2
或者你可以使用理解来缓解它:
Dict = {key.strip():value for (key,value) in Dict}
使用dict
理解:
- 顺便说一下,不要使用 python 数据类型作为变量的名称(例如
Dict
) - Dict Comprehension
- 在字典循环时,
key
和对应的value
可以用.items()
的方法同时检索 .strip
仅在key
data = {' Chicago ': 4, ' Washington ': 9, ' LA ': 26, ' Boston ': 12, ' Seattle ': 2}
data = {k.strip(): v for (k, v) in data.items()}
>>> {'Chicago': 4, 'Washington': 9, 'LA': 26, 'Boston': 12, 'Seattle': 2}
您的错误表明您尝试转换值而不是键,但无论如何,这应该有效:
new_dict = {key.strip(): value for key, value in old_dict.items()}
我认为最简单的方法是循环按键,如下所示。我一路评论了代码。
#Your dictionary
dict = {' Chicago ': 4, ' Washington ': 9, ' LA ': 26, ' Boston ': 12, ' Seattle ': 2}
#Puts all keys of the dictionary into a list
keys = list(dict)
#iterates over dictionary keys
for key in keys:
#for every key, we make a new dictionary item with the 'stripped' key and remove the old one
dict[key.strip()] = dict[key]
del dict[key]
print(dict)
这为我们提供了相同的字典和相同的值,但从键中删除了 leading/trailing 空格:
{'Chicago': 4, 'Washington': 9, 'LA': 26, 'Boston': 12, 'Seattle': 2}
您不能直接编辑键,因为字典是哈希表。更改密钥会更改其哈希值,因此您有两个概念上的选择。
首先是替换整个字典,我觉得比较pythonic:
dct = {k.strip(): v for k, v in dct.items()}
或者:
dct = {k.strip(): dct[k] for k in dct}
第二个选项是保留相同的字典对象,但一个一个地替换映射。由于在遍历字典时不应该修改键,尤其是删除键,所以这很复杂。您必须首先制作原始密钥的单独副本并使用它:
for k in list(dct):
v = dct.pop(k)
dct[k.strip()] = v