嗨,我正在尝试创建应该如下所示的嵌套字典:
{'4/1': {'A': 5, 'B': 6}, '4/2': {'A': 1, , 'B': 7}, '4/3': {'A': 4, 'B': 3}}
我得到的是:
{'4/1': {'A': 5}, '4/2': {'A': 1}, '4/3': {'A': 4}}
代码:
import random
import datetime as dt
futuresIncome = {}
incomeTypes = ["A", "B"]
for incomeType in incomeTypes:
for month in range(4, 5):
for day in range(1, 4):
date = str(month) + "/" + str(day)
if date in futuresIncome.keys():
continue
else:
futuresIncome[date] = {}
futuresIncome[date][incomeType] = random.randint(1, 11)
我做错了什么?谢谢。
答案 0 :(得分:2)
您需要使用defaultdict
:
import random
import datetime as dt
from collections import defaultdict
futuresIncome = defaultdict(dict)
incomeTypes = ["A", "B"]
for incomeType in incomeTypes:
for month in range(4, 5):
for day in range(1, 4):
date = str(month) + "/" + str(day)
futuresIncome[date][incomeType] = random.randint(1, 11)
答案 1 :(得分:1)
您不应该在 continue
块中if
,而是添加当前 date
的数据:
if date in futuresIncome.keys():
futuresIncome[date][incomeType] = random.randint(1, 11)
您还可以使用 setdefault()
方法并摆脱 if-else
块:
for incomeType in incomeTypes:
for month in range(4, 5):
for day in range(1, 4):
date = str(month) + "/" + str(day)
futuresIncome.setdefault(date, {}).update({incomeType: random.randint(1, 11)})
答案 2 :(得分:0)
if date in futuresIncome.keys():
continue
这部分导致
else:
futuresIncome[date] = {}
futuresIncome[date][incomeType] = random.randint(1, 11)
如果 futuresIncome 不包含此日期,则只会执行一次。
可能你想做这样的事情:
if date in futuresIncome.keys():
futuresIncome[date] = {}
futuresIncome[date][incomeType] = random.randint(1, 11)
一般来说,比这更好的选择是 defaultdict。
答案 3 :(得分:0)
我会建议在最内层循环中迭代incomeTypes,如下所示: `
import random
import datetime as dt
futuresIncome = {}
incomeTypes = ["A", "B"]
for month in range(4, 5):
for day in range(1, 4):
for incomeType in incomeTypes:
date = str(month) + "/" + str(day)
if date in futuresIncome.keys():
continue
else:
futuresIncome[date] = {}
futuresIncome[date][incomeType] = random.randint(1, 11)`