我想将字典中的键修改为始终从“ 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方式做到这一点?必须有比我现在拥有的更好的方法。
答案 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)