2017-03-01 85 views
1

假設我有一些含字典個月,短的名字和一些數據Python的映射類型的字典

data_in = {"Jan":2.0, "Feb":5.5} 

和一些類型的字典包含映射

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)}) 

我如何獲得包含與原始數據如下字典長名稱和天數作爲元組?

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

注意'update'修改字典,但返回'None'。所以'day_month = {...}。update(...)'使'day_month'等於'None'。 – unutbu

+0

你的'update'缺少結尾')' – depperm

+0

@depperm不用介意其他無效的語法,對吧? :) –

回答

2

繼承人我自己嘗試 -

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) 

或使用day_month字典

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, 
    ..... } 
0

好像你想要做的就是遍歷day_month字典的鍵是什麼,併爲每個需要從month_namesdata_in值匹配的條目,所以它應該是這個樣子:

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 
+0

這不運行 – depperm

+0

@depperm - 謹慎詳細說明? – MByD

+0

把這個放在他的代碼後面,它給出錯誤'AttributeError:'NoneType'對象沒有'keys''屬性 – depperm