найти соответствующий ключ, значения и вернуть? - PullRequest
0 голосов
/ 13 января 2010
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 ]

3 голосов
/ 13 января 2010
def translate(cities, tags, kwargs):
  return {'city': cities[int(kwargs['city'])],
          'tag': tags[int(kwargs['tag'])]}

Нет ясного способа (из вашего вопроса) автоматизировать выбор словаря по ключу-вспомогательному словарю, поэтому я просто жестко закодировал ключи и aux dict для каждого; если это не то, что вы хотите, пожалуйста, отредактируйте ваш вопрос, чтобы уточнить, что вы хотите ! -)

Редактировать : так, учитывая эту новую и отличную от ОП спецификацию:

      # 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'])}

Конечно, если ОП снова полностью изменит свои спецификации, решение изменится еще раз в ответ (не будет ли невероятно великим , если люди скажут, что они имели в виду, и означали то, что они сказали , вместо того, чтобы постоянно крутить вещи?! -).

1 голос
/ 13 января 2010

Вы можете поместить cities и tags в вспомогательный словарь, чтобы упростить выбор правильных значений с помощью клавиш kwargs:

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

result = {}
for k, v in kwargs:
   result[k] = choices[k][int(v)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...