迭代通过每次迭代从第一个键值开始的字典

时间:2015-02-01 19:32:24

标签: python for-loop dictionary 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

为了让您了解我正在做的事情,我正在尝试找到与特定用户名匹配的日期,并将其打印在电子表格中相关用户名旁边。迭代这些值可能有一种完全不同的方式,但这是我能想到的唯一方法。任何帮助/指导将不胜感激。

2 个答案:

答案 0 :(得分:1)

这样的事情:

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

答案 1 :(得分:0)

根据您对我的评论的回答,似乎您真正有按字母顺序排列的唯一原因是获得排序顺序。在这种情况下,这个问题变得很多更简单; 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.