动态字典迭代工具,允许您使用单键声明设置和检索值
keymapper的Python项目详细描述
键映射器
keymapper是dictionary类的一个子类,它允许您:
- 动态分配键和值
- 选择所需的分隔符(默认为点号:.)
- 访问单个键声明中的所有键和值,而不考虑类型(list、tuple、set)
- 默认情况下被视为dict类型
- 初始化空字典,或在类声明 上接受现有的DICT
- 非常适合键迭代和循环
- keymapper功能不是强加给您的
安装
您可以通过pypi安装:
pip install keymapper
或者,在软件包未归档后在本地安装:
pip install -e /destination
示例
标准dict:
fromkeymapperimportKeyMapperkm_dict=KeyMapper()print(km_dict)# Prints: {} km_dict['key1']='All the keys!'print(km_dict)# Prints: {'key1': 'All the keys!'}
嵌套dict:
fromkeymapperimportKeyMappermy_dict={'messages':{'message_1':'Hey there!'}}km_dict=KeyMapper(my_dict)# Standardprint(km_dict['messages']['message_1'])# Prints: 'Hey there!'# KeyMapperprint(km_dict['messages.message_1'])# Prints: 'Hey there!'
dict与iterables:
fromkeymapperimportKeyMappermy_dict={'messages':{'message_1':'Hey there!'},'objects':[{'obj1':'Hi!'},{'obj2':'There!'},{'obj3':'Peoples!'}]}km_dict=KeyMapper(my_dict)# Standardprint(km_dict['objects'][1]['obj2'])# Prints: 'There!'# KeyMapper - does not care what type of iterableprint(km_dict['objects.1.obj2'])# Prints: 'There!'print(km_dict['objects.1.obj2'])# Prints: 'There!'print(km_dict['objects.1.obj2'])# Prints: 'There!'# Or don't even declare the data typeprint(km_dict['objects.1.obj2'])# Prints: 'There!'
dict和不同的delimier:
fromkeymapperimportKeyMappermy_dict={'messages':{'message_1':'Hey there!'},'objects':[{'obj1':'Hi!'},{'obj2':'There!'},{'obj3':'Peoples!'}]}km_dict=KeyMapper(my_dict,delimiter=',')# Standardprint(km_dict['messages']['message_1'])# Prints: 'Hey there!'# KeyMapper with new delimeterprint(km_dict['messages,message_1'])# Prints: 'Hey there!'
示例
fromkeymapperimportKeyMapperquestions=['What is your name: ','What is your email: ','What is your password: ','How many servers do you want to add: ','What is the ip: ','What is the port: ']keys=['user.name','user.email','user.password','servers']config={'user':{'name':'','email':'','password':''},'servers':[]}km_dict=KeyMapper(config)foriinrange(len(questions)):ifi<3:km_dict[keys[i]]=input(questions[i])else:forrinrange(int(input(questions[i]))):server_info={'ip':'','port':''}fori,kinenumerate(questions[4:]):ifi<1:server_info['ip']=input(k)else:server_info['port']=input(k)km_dict[keys[len(keys)-1]].append(server_info)breakprint(km_dict)# Prints: ... Well, whatever you entered as your input values! Try it if you don't believe me ;)foriinrange(len(km_dict['servers'])):print(km_dict['servers.{}.ip'.format(i)])# Prints the IP for each index iterated through