遍历从每个迭代的第一个键值开始的字典

Iterating through a dictionary that starts at the first key value each iteration

我有一个字典,键中包含用户名,值中包含日期。因为我无法按字母顺序对字典进行排序,所以我想遍历字典键(用户名)以匹配包含所有用户名的单独字母顺序列表中的项目,然后在电子表格中打印关联值(日期)。我 运行 遇到的问题是,当它遍历字典时,它不会每次都从开始的字典键开始,并且列表中要匹配的下一个项目已经在字典中进行了迭代。有没有特定的迭代工具,每次都会从头开始?

我目前拥有的代码:

x=0
nd=0
for k, v in namedatedict.items():
    if k == usernamelist[x]:
        sh1.write(nd, col3_name, v)
        x += 1
        nd += 1

为了让您了解我正在做的事情的一些背景知识,我试图找到与特定用户名匹配的日期,并将其打印在电子表格中关联的用户名旁边。可能有一种完全不同的方法来遍历这些值,但这是我能想到的唯一方法。任何 help/guidance 将不胜感激。

类似的事情怎么样:

for k in usernamelist:
    sh1.write(nd, col3_name, namedatedict[k])
    x += 1
    nd += 1

这将遍历键列表 ("username") -- 并根据该键从字典中获取每个值。

如果 usernamelist 不是 namedatedict 键的真子集,您应该使用 get 获取值并准备好处理非现有密钥:

for k in usernamelist:
    value = namedatedict.get(k)
    if value is not None:
        sh1.write(nd, col3_name, value)
        x += 1
        nd += 1

你也可以使用异常来处理:

for k in usernamelist:
    try:
        sh1.write(nd, col3_name, namedatedict[k])
        x += 1
        nd += 1
    except KeyError:
        pass

最后,如果您不需要维护一个单独的列表来按顺序获取键,您可以在键上使用sorted

for k in sorted(namedatedict.keys())
    sh1.write(nd, col3_name, namedatedict[k])
    x += 1
    nd += 1

根据您对我的评论的回答,您拥有按字母顺序排列的列表的唯一原因似乎真的是为了获得排序顺序。那样的话,这个问题就变得简单多了; Python 支持通过 sorted() 方法按其中一个元素对元组列表进行排序。字典可以通过 items() 方法提供键值元组列表。所以,这就变成了:

for name, date in sorted(namedatedict.items(), key = lambda entry: entry[0]):
    # do whatever you need with the name and date. Names will be alphabetical.