“我怎么能?”;“地图”;仅更改Python中的值的dict

“我怎么能?”;“地图”;仅更改Python中的值的dict,python,functional-programming,Python,Functional Programming,我有这样一句话: food_to_food_type = {"apple": "fruit", "green bean": "vegetable", "tomato": "controversial"} 我有一个函数需要一个dict,其中键是食物类型,值是属于我想要的食物类型的数量,例如: num_foods_of_type = {"fruit": 1, "vegetable": 1, "controversial": 1} 在这种情况下,我希望每种类型的食物数量相等,我将用一个常数表示 有

我有这样一句话:

food_to_food_type = {"apple": "fruit", "green bean": "vegetable", "tomato": "controversial"}
我有一个函数需要一个dict,其中键是食物类型,值是属于我想要的食物类型的数量,例如:

num_foods_of_type = {"fruit": 1, "vegetable": 1, "controversial": 1}
在这种情况下,我希望每种类型的食物数量相等,我将用一个常数表示

有没有一种简单的方法来创建一个新的dict,方法是将my
food\u的值取到my
food\u type
dict中的值,并将它们用作my
num\u foods\u of\u type
dict中的键,将每个值设置为my常量

以下是我想要的行为:

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
但我想以一种功能性的方式来做这件事,这样我就可以在将食物转化为我的功能的过程中,将食物转化为食物类型:

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

当然,我可以自己编写
magic\u maplike\u函数
,但肯定有一种类似python的方法来实现这一点,对吗?

通过这种方法,您可以实现您所需要的:

dict(zip(food_to_food_type.values(), food_to_food_type.values()*[NUM_FOODS_DESIRED]))
>>> {'vegetable': 1, 'fruit': 1, 'controversial': 1}

提出了一个很好的解决方案来计算python列表中出现的次数。 这可以应用于您的案例:

values = food_to_food_type.values()
dict( zip( values, map( values.count, values ) ) )
显然,我对你的问题读得不够仔细。你的意思是:(?)

因此,


根据
iteritems()
iterkeys()
,和
itervaes(),dict(zip(food-to-food-type.values(),len(food-to-food-type.values())*[NUM-FOODS-DESIRED])要精确,最适合的方法可能是dict(zip(food-to-to-food-type.values(),len(food-to-to-FOODS-type)*[NUM FOODS-DESIRED])
在(可能)Python 2.7中不再需要,并在Python 3.x中删除。我接受这个答案而不是塞德里克的答案,仅仅是因为统计事件的形式也非常有用,即使它不是我在这个例子中需要的。谢谢
values = food_to_food_type.values()
dict( zip( values, [NUM_FOOD_TYPES]*len(values) ) )
>>> 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)