有效地更改Python字典的键

时间:2011-08-20 00:15:44

标签: python dictionary

我希望将dict的键替换为较短的变体,以便可以通过紧凑的形式通过线路发送。有没有办法更新密钥,而不是在dict中创建新项目并删除旧项?

我现在在做什么:

>>> a = dict(long_key=None)
>>> a['l'] = a['long_key']
>>> del a['long_key']

我想做的是这样的事情:

>>> a = dict(long_key=None)
>>> a.update_key('long_key', 'l')

我不确定dict的内部情况。但是,似乎update_key之类的内容似乎可以避免需要删除旧密钥。

4 个答案:

答案 0 :(得分:3)

更优雅的解决方案可能是创建一个新的字典...本质上是一个略有不同的浅拷贝:

a_send = dict((k[0], v) for k,v in a.items())

然而,这肯定会降低空间效率 - 您是在寻找空间效率,时间效率还是代码优雅?

答案 1 :(得分:3)

那是不成熟的优化。如果您真的想节省带宽,可以通过压缩数据normally或使用更简单的数据结构来实现。

答案 2 :(得分:1)

您需要发送多少次?也许不是改变任何东西,你可以随时处理密钥?

而不是像(猜测伪代码)那样做:

short_dict = shorten_keys(long_dict)
for k,v in short_dict:
    send_over(k,v)

做类似的事情:

for k,v in long_dict:
    send_over(shorten(k),v)

如果你必须多次发送,你也可以创建一个长的地图 - >短按键并在发送时使用它。浪费空间/时间来创建副本可能不是最佳解决方案。

答案 3 :(得分:0)

longer = dict(long_key=None)
mapping = dict(long_key='l')
shorter = dict((mapping[k], v) for k,v in longer.iteritems())