找到相应的键,值并返回?

时间:2010-01-13 04:50:30

标签: python

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 ''

2 个答案:

答案 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)

您可以将citiestags放入帮助字典中,以便使用kwargs键更轻松地选择正确的值:

choices = {
   'city': cities,
   'tag':  tags
}

result = {}
for k, v in kwargs:
   result[k] = choices[k][int(v)]