Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字典键中删除空格_Python_Dictionary - Fatal编程技术网

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> >在这个场景中,对于单个字符替换,比平移< /C> >运行1-2个百分点;很高兴知道,一般来说,
翻译将更快。更新代码后,您的计时是否仍然准确?你能分享你的基准吗?
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']}