我有一个字典,其中包含键中的用户名,以及值中的日期。因为我无法按字母顺序对字典进行排序,所以我想迭代字典键(用户名)以匹配包含所有用户名的单独字母顺序列表中的项目,然后在电子表格中打印关联值(日期)。我遇到的问题是,当它遍历字典时,它不会每次从开始字典键开始,并且列表中已经迭代了列表中要匹配的下一个项目。是否有一个特定的迭代工具,每次都会从头开始?
我到目前为止的代码:
x=0
nd=0
for k, v in namedatedict.items():
if k == usernamelist[x]:
sh1.write(nd, col3_name, v)
x += 1
nd += 1
为了让您了解我正在做的事情,我正在尝试找到与特定用户名匹配的日期,并将其打印在电子表格中相关用户名旁边。迭代这些值可能有一种完全不同的方式,但这是我能想到的唯一方法。任何帮助/指导将不胜感激。
答案 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.