【问题标题】:Looping through a nested dictionary循环遍历嵌套字典
【发布时间】:2018-02-02 16:34:51
【问题描述】:

我设置了一个嵌套字典,我正在尝试访问它,但是当密钥设置为我的用户决定的内容时(我在下面的示例中设置为二月)时无法访问“nextmo”部分。理想情况下它应该打印'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'])

【问题讨论】:

  • 不知道你在做什么,但是看起来有点复杂。

标签: python python-3.x dictionary


【解决方案1】:

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

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

【讨论】:

  • 谢谢!我实际上尝试了一种变体,但完成了 D['bday_month_in']
【解决方案2】:

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

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']

【讨论】:

  • 谢谢!肯定会派上用场(:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 2019-01-16
  • 2020-03-04
  • 2020-08-03
  • 2014-05-11
  • 2019-03-22
  • 2017-07-25
相关资源
最近更新 更多