循环嵌套字典

时间:2018-02-02 16:34:52

标签: python python-3.x dictionary

我有一个嵌套字典设置,我正在尝试访问,但在将密钥设置为我的用户决定的内容时访问'nextmo'部分时遇到问题(我在下面的示例中将其设置为2月)。理想情况下它应该打印'Mar'

D = {'Jan': {'days': 31, 'nextmo': 'Feb', 'prevmo': 'Dec'},
 'Feb': {'days': 29, 'nextmo': 'Mar', 'prevmo': 'Jan'},
 'Mar': {'days': 31, 'nextmo': 'Apr', 'prevmo': 'Feb'},
 'Apr': {'days': 30, 'nextmo': 'May', 'prevmo': 'Mar'}, 
 'May': {'days': 31, 'nextmo': 'Jun', 'prevmo': 'Apr'},
 'Jun': {'days': 30, 'nextmo': 'Jul', 'prevmo': 'May'},
 'Jul': {'days': 31, 'nextmo': 'Aug', 'prevmo': 'Jun'},
 'Aug': {'days': 31, 'nextmo': 'Sep', 'prevmo': 'Jul'}, 
 'Sep': {'days': 30, 'nextmo': 'Oct', 'prevmo': 'Aug'},
 'Oct': {'days': 31, 'nextmo': 'Nov', 'prevmo': 'Sep'},
 'Nov': {'days': 30, 'nextmo': 'Dec', 'prevmo': 'Nov'},
 'Dec': {'days': 31, 'nextmo': 'Jan', 'prevmo': 'Jan'},}

bday_month_in = "Feb"

for k, v in D.items():
    if bday_month_in is dict:
       print(bday_month_in['nextmo'])

2 个答案:

答案 0 :(得分:4)

如果您只想在bda_month_in之后的下一个月,那么这应该有效:

bday_month_in = 'Feb'
D[bday_month_in]['nextmo']  # 'Mar'

答案 1 :(得分:1)

首先,您的代码中存在一个主要问题:

if bday_month_in is dict:
    # [...]

这里,bday_month_in是一个字符串("Feb"),而不是字典,所以这个if语句永远不会成立。

现在,如果你想迭代嵌套的字典,你可以这样做:

for (month, inner_dict) in D.items():                   
    print("Month: {}".format(month))
    for (key, value) in inner_dict.items():
        print("   key={}, value={}".format(key, value))

但是从您的问题看来,您甚至不需要迭代嵌套的字典:

D['Feb']['nextmo']