Python映射dicts

Python映射dicts,python,dictionary,Python,Dictionary,假设我有一些dict,其中包含几个月的短名称和一些数据 data_in = {"Jan":2.0, "Feb":5.5} 和一些包含映射的dict month_names = {"Jan":"January", "Feb":"February"} day_month = {day:"Jan" for day in range(1,32)} day_month.update({day:"Feb" for day in range(32,60)}) 如何获得以下dict,其中包含以元组形式表示

假设我有一些dict,其中包含几个月的短名称和一些数据

data_in = {"Jan":2.0, "Feb":5.5} 
和一些包含映射的dict

month_names = {"Jan":"January", "Feb":"February"}
day_month = {day:"Jan" for day in range(1,32)}
day_month.update({day:"Feb" for day in range(32,60)})
如何获得以下dict,其中包含以元组形式表示的长名称和天数的原始数据

{("January", 1):2.0, ("January", 2):2.0 ...}

似乎您要做的是迭代
day\u month
字典的键,并为每个键取
month\u names
中的
data\u中的值的匹配项,因此它应该类似于:

result = {}
for day in day_month.keys():
    short_month = day_month[day]
    data = data_in[short_month]
    name = month_names[short_month]
    new_key = (name, day)
    result[new_key] = data
这是我自己的尝试-

from itertools import count
c = count(1,1)
days = {"Feb" : 28, "Jan" : 31}

mapping = {(month_names[i], next(c)) : data_in[i]  for i in data_in.keys()  for _ in range(days[i])}

print (mapping)
或使用您的
日/月
dict

mapping = {(month_names[day_month[i]], i) : data_in[day_month[i]] for i in day_month.keys()} 

print mapping 
输出-

{('January', 1): 2.0,
 ('January', 2): 2.0,
 ('January', 3): 2.0,
 ('January', 4): 2.0,
 ('January', 5): 2.0,
 ('January', 6): 2.0,
 ('January', 7): 2.0,
 ('January', 8): 2.0,
 ('January', 9): 2.0,
 ('January', 10): 2.0,
 ('January', 11): 2.0,
 ('January', 12): 2.0,
 ('January', 13): 2.0,
 ('January', 14): 2.0,
 ('January', 15): 2.0,
 ('January', 16): 2.0,
 ('January', 17): 2.0,
 ('January', 18): 2.0,
 ('January', 19): 2.0,
 ('January', 20): 2.0,
 ('January', 21): 2.0,
 ('January', 22): 2.0,
 ('January', 23): 2.0,
 ('January', 24): 2.0,
  ..... }

请注意,
update
修改dict,但返回
None
。因此,
day\u-month={…}.update(…)
使
day\u-month
等于
None
。您的
更新
缺少结尾
@depperm不要介意其他无效语法,对吗?:)day\u month错误已修复。“day number”是Julian day吗?@depperm-需要详细说明吗?将其放在他的代码后面,它会给出错误
AttributeError:“NoneType”对象没有属性“keys”
@depperm-是的,我看到了帖子本身的评论,明白了这一点。但这与答案无关。我同意使用正确的语法更好,但这不是问题所在。