用Python方式移动字典中的所有键

时间:2019-06-13 16:31:29

标签: python

我想将字典中的键修改为始终从“ 0”开始。输出的键始终从0开始,键之间的间隙始终为1。

Input: test = {'1' : 'a', '2' : 'b', '3' : 'c'}
Output: test = {'0' : 'a', '1' : 'b', '2' : 'c'}

Input: test = {'-1' : 'a', '0' : 'b', '1' : 'c'}
Output: test = {'0' : 'a', '1' : 'b', '2' : 'c'}


# my code 
def convert_dict(test)
    min_key =int(min(test, key=int))
    test2 = {}
    gap = 0 - min_key
    for key, _ in test.items():
        test2[str(int(key) + gap)] = test[key]
    return test2

什么是Python方式做到这一点?必须有比我现在拥有的更好的方法。

2 个答案:

答案 0 :(得分:4)

考虑到差距的字典理解

 from django.apps import AppConfig
 class AccountConfig(AppConfig):
    name = 'app name'
    verbose_name = "new app name"

编辑1:虽然def convert_dict(test) gap = int(min(test, key=int)) return {str(int(key)-gap): value for key, value in test.items()} 方法很优雅(请参阅L3viathan's answer),但是由于排序是turn to list -> sort it -> enumerate -> dict,因此它比字典理解方法O(n*log n)慢(n找到min和n再次遍历字典。

答案 1 :(得分:2)

假设输出应该是无间隙的并且始终从零开始,则可以使用排序后的值:

test = {str(i): value for i, value in enumerate(sorted(test.values()))}

旧的错误答案:

使用字典理解!

test = {str(int(key)+1): value for key, value in test.items()}

如果您对键进行了几种不同的转换,则可以编写一个便捷函数:

def change_keys(fn, dct):
    return {fn(key): value for key, value in test.items()}

test = change_keys(lambda x: str(int(x) + 1), test)