我有这样的字典:
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
dict的值来创建新的dict,并将它们用作num_foods_of_type
dict中的键,将每个值设置为常量?< / p>
这是我想要的行为:
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 dict转换为我的函数:
order_food_types(magic_maplike_function(food_to_food_type.values(), NUM_FOODS_DESIRED))
当然,我自己可以写magic_maplike_function
,但肯定必须有Pythonic的方法才能做到这一点,对吗?
答案 0 :(得分:4)
提出了一个很棒的解决方案here来计算python列表中出现的次数。 这适用于您的情况:
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) ) )
答案 1 :(得分:2)
您可以通过这种方式实现所需:
dict(zip(food_to_food_type.values(), food_to_food_type.values()*[NUM_FOODS_DESIRED]))
>>> {'vegetable': 1, 'fruit': 1, 'controversial': 1}
答案 2 :(得分:1)
>>> 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)