2016-04-03 2 views
1

Я сортирую словарь и пытаюсь пройти через него и определить, какой из ключей словаря в «food_type» имеет соответствующее значение «fruit», , До сих пор переживает это самый дальний мой код ниже берет меня:Словари - сужение значения и печать, какие ключи принадлежат ему - Python

def fruit (food_type): 


     for f in food_type.values(): 
       if f=="fruit" : 
        return(f) 

fruit ({'apple': 'fruit', 'lettuce': 'veggie', 'banana':'fruit'}) 

Это просто возвращает «плод» один раз, так что я не 100%, если это то, что я хочу в этом случае, так как моя конечная цель заключается в вернуть значение в словарь и вернуть ключи, которые имеют «плод» в качестве значения. Я знаю, что для того, чтобы получить значение, которое вы можете просто сделать: d [K] или d.get (к) и т.д.

Я ищу выход следующих за этим:

["apple","banana"] 

ответ

5

Вы захотите выполнить итерацию через пары (key, value), скопировать совпадения в список и затем вернуть этот список.

list comprehension получает работу хорошо:

def fruit(food_type): 
    return [k for k, v in food_type.items() if v == 'fruit'] 
0

Это может быть то, что вы после:

def fruit (food_type): 
    return [k for k in food_type if food_type[k] == "fruit"] 

print fruit ({'apple': 'fruit', 'lettuce': 'veggie', 'banana':'fruit'}) 

# ['apple', 'banana'] 
0

Ниже код вернет вам новый словарь только с записями со значением равный «плод»:

>>> d = {'apple': 'fruit', 'lettuce': 'veggie', 'banana':'fruit'} 
>>> {k: v for k, v in d.items() if v == 'fruit'} 
{'apple': 'fruit', 'banana': 'fruit'} 

Если вы хотите только клавиши, просто наберите на них клавиши() ,

0

Вы также можете инвертировать словарь с:

inverse_d = {} 
for k, v in d.iter_items(): 
    if v not in inverse_d: 
     inverse_d[v] = [k] 
    else : 
     inverse_d[v].append(k) 

, а затем

print inverse_d["fruit"] 
+0

'dict.setdefault' или' collections.defaultdict' устранило бы необходимость, если/еще блок. –

+1

Я знаю. Я считал, что это легче понять для новичка. – Julius

+0

Спасибо, что поставили его в более простых выражениях. Я довольно новичок в Python. – Nick

Смежные вопросы