I have a dictionary
cities = {1:'Kompong Som', 2: 'Kompong Thom', 3: 'Phnom Penh'}
tags = {1: 'school', 2: 'public', 3: 'private'}
kwargs = {'city': '2', 'tag': '3'}#should be improve
我想得到这样的输出:
kwargs = {'city': 'Kompong Thom', 'tag': 'private'}
EDIT 从URL传递
keyword = customer_type=&last_contact=&tag=2,3&city=3&sale_volume=&acc_creation=&last_sale=&key_comm=
在这种情况下
tag=2,3&city=3 maybe in other case tag=2&city=1,2,3 or tag=1,2,3&city=1,2,3
def present_filter(self, list_result, keyword):
#@todo: the present filter should be friendly with user .
if len(list_result) > 0:
keywords = eval(json.dumps(keyword))
new_keywords = {}
for key,value in keywords.items():
if value != '' :
new_keywords[key] = value
return new_keywords
# Now new_keywords is {'city': '3', 'tag': '2,3'}
# I WANT TO BE LIKE THIS
#new_keywords is {'city': 'Phnom Penh', 'tag': 'public,private'}
else:
return ''
答案 0 :(得分:3)
def translate(cities, tags, kwargs):
return {'city': cities[int(kwargs['city'])],
'tag': tags[int(kwargs['tag'])]}
没有明确的方法(根据你的问题)自动化键名到辅助字典选择,所以我只是硬编码键和辅助字典用于每个;如果这不是您想要的,请编辑您的问题以澄清您想要的 ! - )
编辑:所以给出了来自OP的这个新的不同规范:
# Now new_keywords is {'city': '3', 'tag': '2,3'}
# I WANT TO BE LIKE THIS
#new_keywords is {'city': 'Phnom Penh', 'tag': 'public,private'}
解决方案变为:
def commaplay(adict, value):
return ','.join(adict[int(x)] for x in value.split(','))
def translate(cities, tags, kwargs):
return {'city': commaplay(cities, kwargs['city']),
'tag': commaplay(tags, kwargs['tag'])}
当然,如果OP再次完全改变他们的规格,那么解决方案将会再次发生变化(如果人们说出他们的意思>>那么非常好 strong>,和 意味着他们所说的,而不是一直在旋转的东西?! - )。
答案 1 :(得分:1)
您可以将cities
和tags
放入帮助字典中,以便使用kwargs
键更轻松地选择正确的值:
choices = {
'city': cities,
'tag': tags
}
result = {}
for k, v in kwargs:
result[k] = choices[k][int(v)]