Как я могу "отобразить" диктовку, чтобы изменить только значения в Python - PullRequest
2 голосов
/ 24 ноября 2011

У меня есть такой запрос:

food_to_food_type = {"apple": "fruit", "green bean": "vegetable", "tomato": "controversial"}

У меня есть функция, которая требует указания, где ключами являются типы продуктов, а значения - это количество продуктов, принадлежащих к тому типу, которые я хочу, например:

num_foods_of_type = {"fruit": 1, "vegetable": 1, "controversial": 1}

В этом случае мне нужно одинаковое количество продуктов каждого типа, которые я буду представлять с константой.

Есть ли простой способ сделать новый дикт, принявзначения моего food_to_food_type dict и используя их в качестве ключей в моем num_foods_of_type dict, устанавливая значения каждого в мою константу?

Вот поведение, которое я хочу:

NUM_FOODS_DESIRED = 1
num_foods_of_type = {}
for food_type in food_to_food_type.values():
    num_foods_of_type[food_type] = NUM_FOODS_DESIRED

Но я хочу сделать это функциональным образом, чтобы я мог просто превратить диктат food_to_food_type на своем пути в свою функцию:

order_food_types(magic_maplike_function(food_to_food_type.values(), NUM_FOODS_DESIRED))

Конечно, я могу написать magic_maplike_function сам, но, безусловно, долженбудь Pythonic способ сделать это, верно?

Ответы [ 3 ]

4 голосов
/ 24 ноября 2011

Было предложено замечательное решение здесь для подсчета количества вхождений в списке питонов. Это может быть применено к вашему делу:

values = food_to_food_type.values()
dict( zip( values, map( values.count, values ) ) )

Очевидно, я не прочитал ваш вопрос достаточно внимательно. Вы имели в виду что-то вроде этого: (?)

values = food_to_food_type.values()
dict( zip( values, [NUM_FOOD_TYPES]*len(values) ) )
2 голосов
/ 24 ноября 2011

Вы можете достичь того, что вам нужно, таким образом:

dict(zip(food_to_food_type.values(), food_to_food_type.values()*[NUM_FOODS_DESIRED]))
>>> {'vegetable': 1, 'fruit': 1, 'controversial': 1}
1 голос
/ 24 ноября 2011
>>> help(dict.fromkeys)
Help on built-in function fromkeys:

fromkeys(...)
    dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.
    v defaults to None.

Таким образом,

dict.fromkeys(food_to_food_type.values(), NUM_FOODS_DESIRED)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...