Python 从字典键中删除空格
我有一本包含键/值的字典,例如:Python 从字典键中删除空格,python,dictionary,Python,Dictionary,我有一本包含键/值的字典,例如: {'C 14': ['15263808', '13210478'], 'W 1': ['13122205']} 如何删除所有键的空白,使其变为: {'C14': ['15263808', '13210478'], 'W1': ['13122205']} 您可以处理字典中的所有键;您可以使用str.translate()删除空格;这方面的Python 2版本是: {k.translate(None, ' '): v for k, v in diction
{'C 14': ['15263808', '13210478'], 'W 1': ['13122205']}
如何删除所有键的空白,使其变为:
{'C14': ['15263808', '13210478'], 'W1': ['13122205']}
您可以处理字典中的所有键;您可以使用
str.translate()
删除空格;这方面的Python 2版本是:
{k.translate(None, ' '): v for k, v in dictionary.iteritems()}
Python 3的版本是:
{k.translate({32: None}): v for k, v in dictionary.items()}
您还可以使用str.replace()
删除空格:
{k.replace(' ', ''): v for k, v in dictionary.items()}
但对于较长的键,这可能较慢;看
请注意,这些将生成一个新词典
Python 2上的演示:
>>> d = {'C 14': ['15263808', '13210478'], 'W 1': ['13122205']}
>>> {k.translate(None, ' '): v for k, v in d.iteritems()}
{'W1': ['13122205'], 'C14': ['15263808', '13210478']}
以及2.6兼容版本(使用):
您也可以只使用
str.replace
:
In [4]: d = {'C 14': ['15263808', '13210478'], 'W 1': ['13122205']}
In [5]: d = {k.replace(" ",""): v for k,v in d.items()}
In [6]: d
Out[6]: {'C14': ['15263808', '13210478'], 'W1': ['13122205']}
对于python2.6:
d = dict((k.replace(" ",""),v) for k,v in d.items())
没有听写理解:
>>> d = {'C 14': ['15263808', '13210478'], 'W 1': ['13122205']}
>>> dict(((k.replace(' ',''),v) for k,v in d.items()))
{'W1': ['13122205'], 'C14': ['15263808', '13210478']}
这里有一个不需要dict理解的解决方案,它在适当的位置编辑字典,并假设没有两个旧键映射到同一个新键
d = {'C 14': ['15263808', '13210478'], 'W 1': ['13122205']}
for key in d.keys():
if ' ' in key:
d[key.translate(None, ' ')] = d[key]
del d[key]
print d # {'W1': ['13122205'], 'C14': ['15263808', '13210478']}
经过一段时间后,这比创建新词典快25%
循环迭代
d.keys()
而不是直接迭代d
,以避免重新访问键并避免整个“迭代更改对象”问题。那么iteritems()呢
对于Python2版本?这是在Python2.6.6上的,因此字典理解不需要working@GreyTek:然后在Python2.6.6上使用它,这样字典理解就不需要了working@GreyTek只需将其替换为gen exp和dict CALL您要编辑现有词典还是创建新词典?需要对碰撞键做些什么吗?所有键都是唯一的,理想的情况是从现有的字典键中删除空格;首先建立一个列表没有任何意义,生成器表达式将在其中发挥作用;也许我需要为单个字符替换而重新计时。@史蒂文伦巴尔基我修正了删除关键问题,作者使用Python 2.6,所以不需要考虑Python 3.x。从我的测试中看到@ MaTijnPixter,<代码>替换< /C> >在这个场景中,对于单个字符替换,比翻译将更快。更新代码后,您的计时是否仍然准确?你能分享你的基准吗?
d = {'C 14': ['15263808', '13210478'], 'W 1': ['13122205']}
for key in d.keys():
if ' ' in key:
d[key.translate(None, ' ')] = d[key]
del d[key]
print d # {'W1': ['13122205'], 'C14': ['15263808', '13210478']}