我有以下枚举:
import copy
dict_of_df = {}
for ym in [201511, 201612, 201710]:
key_name = 'df_new_'+str(ym)
dict_of_df[key_name] = copy.deepcopy(df)
to_change = df['YearMonth']< ym
dict_of_df[key_name].loc[to_change, 'new_col'] = ym
dict_of_df.keys()
Out[36]: ['df_new_201710', 'df_new_201612', 'df_new_201511']
dict_of_df
Out[37]:
{'df_new_201511': A B ID t YearMonth new_col
0 -a a 1 2016-12-05 07:53:35.943 201612 201612
1 1 NaN 2 2016-12-05 07:53:35.943 201612 201612
2 a c 2 2016-12-05 07:53:35.943 201612 201612,
'df_new_201612': A B ID t YearMonth new_col
0 -a a 1 2016-12-05 07:53:35.943 201612 201612
1 1 NaN 2 2016-12-05 07:53:35.943 201612 201612
2 a c 2 2016-12-05 07:53:35.943 201612 201612,
'df_new_201710': A B ID t YearMonth new_col
0 -a a 1 2016-12-05 07:53:35.943 201612 201710
1 1 NaN 2 2016-12-05 07:53:35.943 201612 201710
2 a c 2 2016-12-05 07:53:35.943 201612 201710}
# Extract a single dataframe
df_2015 = dict_of_df['df_new_201511']
我想使用public enum ProductType {
RED_MEAT, POULTRY, FISH, EGGS, NUTS, DAIRY, CERIALS_AND_GRAINS, FRUIT, VEGETABLES, OIL_AND_SUGARS
}
和null值创建带有键的地图。我根据this answer尝试了以下代码:
enum
但我在这里得到Map<ProductType, DietFrequency> diet = Arrays.stream(ProductType.values())
.collect(Collectors.toMap(productType -> productType, value -> null));
。我究竟做错了什么?
答案 0 :(得分:3)
我非常确定EnumMap
更适合您的需求。
Map<ProductType, DietFrequency> diet = new EnumMap<>(ProductType.class);
对于枚举值,EnumMap比HashMap更有效。默认情况下,不存在映射。根据您的使用情况,可能没问题(map.get(RED_MEAT)
返回null,这似乎是您想要的),但是如果您想要执行containsKey()检查或循环条目,那么您就可以了必须将映射显式设置为null:
Arrays.stream(ProductType.values()).forEach(v-> diet.put(v, null));